开源项目-eg

1. 配置模块python

默认配置,
markdown

用户自定义配置,spa

命令行配置命令行

优先级从地到高code

resolved_egrc_path = get_priority(args.egrc_path, '~/.egrc', None)
egrc_config = get_config_tuple_from_egrc(resolved_egrc_path)

获得的egrc_config配置,
字符串

而后和命令行,默认配置遗弃比较。get

resolved_examples_dir = get_priority(
        args.examples_dir,
        egrc_config.examples_dir,
        DEFAULT_EXAMPLES_DIR
    )

color_config有点特殊,
cmd

    color_config = None
    if resolved_use_color:
        default_color_config = get_default_color_config()
        color_config = merge_color_configs(
            egrc_config.color_config,
            default_color_config
        )


而后得出最后解析的config,string

result = Config(
        examples_dir=resolved_examples_dir,
        custom_dir=resolved_custom_dir,
        color_config=color_config,
        use_color=resolved_use_color,
        pager_cmd=resolved_pager_cmd
    )


2. 寻找命令文件
it

会从两个目录下分别找相应的markdown文件。

example_dir, custome_dir

def has_default_entry_for_program(program, config):
    """Return True if has standard examples for program, else False."""
    if config.examples_dir:
        file_path = get_file_path_for_program(
            program,
            config.examples_dir
        )
        return os.path.isfile(file_path)
    else:
        return False

经过将program加'.md'字符串, os.path.isfile判断是否存在。

    file_data = ''

    if custom_file_path:
        file_data += _get_contents_of_file(custom_file_path)

    if default_file_path:
        file_data += _get_contents_of_file(default_file_path)

    if use_color:
        colorizer = color.EgColorizer(color_config)
        file_data = colorizer.colorize_text(file_data)

    page_string(file_data, pager_cmd)

直接读取文件内容, 最后调用colorizer将文本彩色画。


3. 文本彩色化

def colorize_heading(self, text):
        return self._color_helper(
            text,
            '(^#+)(.*)$',
            (
                self.color_config.pound +
                r'\1' +
                self.color_config.pound_reset +
                self.color_config.heading +
                r'\2' +
                self.color_config.heading_reset
            )
        )
        
def _color_helper(self, text, pattern, repl):
        # < 2.7 didn't have the flags named argument.
        if sys.version_info[1] < 7:
            compiled_pattern = re.compile(pattern, re.MULTILINE)
            return re.sub(
                compiled_pattern,
                repl,
                text
            )
        else:
            return re.sub(
                pattern,
                repl,
                text,
                flags=re.MULTILINE
            )


彩色画文本,实质上是将某些文本先后加上特定字符串,输出就达到彩色的效果。

以colorize_heading为例,是调用re.sub,用正则匹配,而后添加特定字符串。

这里re.sub的用法比较特殊, 使用了'\1', '\2',表示以前的捕获组

相关文章
相关标签/搜索