Loading...
No commits yet
Not committed History
Blame
guidelines.py • 2.7 KB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Timestamp: 2026-01-27
# File: src/scitex_writer/_cli/guidelines.py

"""Guidelines CLI commands."""

import argparse
import sys
from pathlib import Path


def cmd_guidelines(args: argparse.Namespace) -> int:
    """Get IMRAD writing guidelines for a section."""
    from ..guidelines import _get_source, build, get

    try:
        source = _get_source(args.section)

        if args.info:
            print(f"Section: {args.section}")
            print(f"Source: {source['source']}")
            print(f"Path: {source['path']}\n")

        if args.draft:
            if args.draft == "-":
                draft = sys.stdin.read()
            else:
                draft_path = Path(args.draft)
                if not draft_path.exists():
                    print(f"Error: Draft file not found: {draft_path}", file=sys.stderr)
                    return 1
                draft = draft_path.read_text(encoding="utf-8")

            prompt = build(args.section, draft)
            print(prompt)
        else:
            guidelines = get(args.section)
            print(guidelines)

        return 0
    except (ValueError, FileNotFoundError) as e:
        print(f"Error: {e}", file=sys.stderr)
        return 1


def cmd_list(args: argparse.Namespace) -> int:
    """List available guidelines sections."""
    from ..guidelines import _SECTIONS

    print("Available sections:")
    for section in _SECTIONS:
        print(f"  - {section}")
    return 0


def register_parser(subparsers) -> argparse.ArgumentParser:
    """Register guidelines subcommand parser."""
    guidelines_help = """IMRAD writing guidelines for scientific manuscripts.

Quick start:
  scitex-writer guidelines list              # List available sections
  scitex-writer guidelines abstract          # Get abstract guidelines
  scitex-writer guidelines abstract -d draft.tex  # Build with draft
"""
    parser = subparsers.add_parser(
        "guidelines",
        help="IMRAD writing guidelines",
        description=guidelines_help,
        formatter_class=argparse.RawDescriptionHelpFormatter,
    )
    sub = parser.add_subparsers(dest="guidelines_command", title="Commands")

    lst = sub.add_parser("list", help="List available sections")
    lst.set_defaults(func=cmd_list)

    for section in ["abstract", "introduction", "methods", "discussion", "proofread"]:
        sp = sub.add_parser(section, help=f"Get {section} guidelines")
        sp.add_argument("-d", "--draft", help="Path to draft file (use '-' for stdin)")
        sp.add_argument("-i", "--info", action="store_true", help="Show source info")
        sp.set_defaults(func=cmd_guidelines, section=section)

    return parser


# EOF