""" Shared utilities for emoji/ASCII output mode handling - Issue #37 This module provides common functionality for handling emoji vs ASCII output preferences across different MarkiTect tools. It implements the standardized approach for emoji preference handling with proper priority management. Priority Order: 1. CLI flags (--ascii or --emoji) - highest priority 2. MARKITECT_EMOJI environment variable - medium priority 3. Default to emoji output - fallback behavior Environment Variable Support: - MARKITECT_EMOJI=true/false (case-insensitive) - Valid false values: 'false', 'f', '0' - Invalid values default to emoji output (true) Usage: from emoji_utils import determine_output_mode, add_emoji_arguments parser = argparse.ArgumentParser(description='My tool') add_emoji_arguments(parser) args = parser.parse_args() use_ascii = determine_output_mode(args) """ import os def determine_output_mode(args): """ Determine whether to use ASCII or emoji output based on CLI args and env. This function implements the standardized priority logic for emoji/ASCII mode selection across MarkiTect tools. It respects user preferences set via CLI flags or environment variables, with appropriate fallback behavior. Priority order (highest to lowest): 1. CLI flags (--ascii or --emoji) - explicit user choice 2. MARKITECT_EMOJI environment variable - persistent user preference 3. Default to emoji output - engaging default behavior Environment Variable Handling: - MARKITECT_EMOJI is processed case-insensitively - Valid false values: 'false', 'f', '0' - All other values (including invalid ones) default to emoji mode - This provides robust fallback behavior for configuration errors Args: args (argparse.Namespace): Parsed command line arguments containing 'ascii' and 'emoji' boolean attributes from add_emoji_arguments() Returns: bool: True if ASCII mode should be used, False for emoji mode Example: >>> args = parser.parse_args(['--ascii']) >>> determine_output_mode(args) True >>> # With MARKITECT_EMOJI=false environment variable set >>> args = parser.parse_args([]) >>> determine_output_mode(args) True """ # CLI flags take precedence if args.ascii: return True if args.emoji: return False # No explicit flag, check environment variable emoji_env = os.getenv('MARKITECT_EMOJI', 'true').lower() return emoji_env in ['false', 'f', '0'] def add_emoji_arguments(parser): """ Add standardized emoji/ASCII output format arguments to an ArgumentParser. This function adds the standard --ascii and --emoji flags to any command-line tool, ensuring consistent behavior across MarkiTect. The flags are configured as mutually exclusive to prevent conflicting output modes. The added arguments integrate seamlessly with determine_output_mode() to provide complete emoji preference handling. Arguments Added: - --ascii: Use ASCII characters only (no emojis) - --emoji: Use emoji output (default behavior) Args: parser (argparse.ArgumentParser): The ArgumentParser instance to modify Returns: argparse._MutuallyExclusiveGroup: The mutually exclusive group containing the emoji-related arguments for further customization Example: >>> import argparse >>> parser = argparse.ArgumentParser(description='My tool') >>> parser.add_argument('input_file', help='Input file path') >>> emoji_group = add_emoji_arguments(parser) >>> args = parser.parse_args(['file.txt', '--ascii']) >>> print(f"Use ASCII: {determine_output_mode(args)}") Use ASCII: True Note: This function must be called before parser.parse_args() to ensure the arguments are available for parsing. """ format_group = parser.add_mutually_exclusive_group() format_group.add_argument( '--ascii', action='store_true', help='Use ASCII characters only (no emojis)') format_group.add_argument( '--emoji', action='store_true', help='Use emoji output (default)') return format_group