"""Linha de comando. Exemplos: python -m analise_artigo artigos/rumo-a-eficiencia --out relatorios python -m analise_artigo caminho/para/main.tex """ from __future__ import annotations import argparse import sys from pathlib import Path from .bib import parse_bib from .report import write_reports from .texparse import parse_article from .analyze import analyze def find_tex(target: Path) -> Path | None: if target.is_file() and target.suffix == ".tex": return target if target.is_dir(): candidates = sorted(target.glob("*.tex")) return candidates[0] if candidates else None return None def find_bib(tex: Path) -> Path | None: bib = tex.with_name(tex.stem + ".bib") if bib.exists(): return bib for candidate in sorted(tex.parent.glob("*.bib")): return candidate return None def main(argv: list[str] | None = None) -> int: p = argparse.ArgumentParser( prog="analise-artigo", description="Analisa um artigo LaTeX (ABNT) e gera relatório de " "estrutura, métricas e citações.", ) p.add_argument( "artigo", help="arquivo .tex ou diretório que contém o .tex", ) p.add_argument( "--out", "-o", default="relatorios", help="diretório de saída do relatório (padrão: relatorios/)", ) args = p.parse_args(argv) target = Path(args.artigo) tex = find_tex(target) if tex is None: print(f"erro: nenhum .tex encontrado em {target}", file=sys.stderr) return 1 bib = find_bib(tex) print(f"→ artigo: {tex}") print(f"→ referências: {bib or 'nenhum .bib encontrado'}") article = parse_article(tex) refs = parse_bib(bib) if bib else {} analysis = analyze(article, refs) outdir = Path(args.out) md, js = write_reports(analysis, outdir) resumo = analysis.metrics["resumo_checks"] print(f"\nResumo: {resumo['ok']} ok, " f"{resumo['warn']} aviso(s), " f"{resumo['fail']} falha(s), " f"{len(analysis.issues)} questão(ões) de prosa") print(f"\n→ relatório: {md}") print(f"→ dados: {js}") return 0 if resumo["fail"] == 0 else 2 if __name__ == "__main__": raise SystemExit(main())