开源项目-eg

1. 配置模块

默认配置,

用户自定义配置,

命令行配置

优先级从地到高

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

得到的egrc_config配置,

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

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

color_config有点特殊,

    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,

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. 寻找命令文件

会从两个目录下分别找相应的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',表示之前的捕获组

转载于:https://my.oschina.net/u/569730/blog/411574

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值