#!/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