当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 预处理后再 ctags
帖子发表于 : 2008-10-19 11:07 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
消除万恶的宏给 ctags 造成的障碍

代码:
#!/bin/bash -e
# 预处理后再 ctags
# Written by AutumnCat. 19 Oct, 2008.

help(){
        cat <<END
Usage: cpp-tags.sh [c|cpp|cxx|c++] <filelist >tags
END
}

export LANG=C # 消除 locale 的影响

# select language
case "$1" in
        "c++"|"cxx"|"cpp")
        LANG_KIND='c++'
        ;;
        "c"|"")
        LANG_KIND='c'
        ;;
        "-?"|"-h")
        help
        exit 0
        ;;
        *)
        echo Unknown language: "$1" >&2
        help >&2
        exit 2
        ;;
esac

#TAGS_FILENAME=${TAGS_FILENAME:-'-'}
SORT_CMD=${SORT_CMD:-'sort'}
SORT_OPT=${SORT_OPT:-'-u'}
CPP_CMD=${CPP_CMD:-'cpp'}
CPP_OPT=${CPP_OPT:-"-x $LANG_KIND"}
CTAGS_CMD=${CTAGS_CMD:-'ctags'}
CTAGS_OPT=${CTAGS_OPT:-"-f - --language-force=$LANG_KIND --$LANG_KIND-kinds=+px --fields=+iaS --extra=+q --line-directives=yes -n -u"}
TMP_FILE_NAME=`tempfile -pcpp-tags`
TMP_FILE_DIR=`dirname "$TMP_FILE_NAME"`
TMP_FILE_BASENAME=`basename "$TMP_FILE_NAME"`

make_tag_1(){
        while read i
        do
                "$CPP_CMD" $CPP_OPT "$i" > "$TMP_FILE_NAME" &
                "$CTAGS_CMD" $CTAGS_OPT "$i"
                wait
                pushd "$TMP_FILE_DIR" >/dev/null
                "$CTAGS_CMD" $CTAGS_OPT "$TMP_FILE_BASENAME"
                popd >/dev/null
        done | sort -u
}

gen_pped_code(){
        rm -f "$TMP_FILE_NAME"
        while read i
        do
                "$CPP_CMD" $CPP_OPT "$i" >> "$TMP_FILE_NAME"
        done
}

make_tag_2(){
        (
        tee >(gen_pped_code) | "$CTAGS_CMD" -L - $CTAGS_OPT
        pushd "$TMP_FILE_DIR" >/dev/null
        "$CTAGS_CMD" $CTAGS_OPT "$TMP_FILE_BASENAME"
        popd >/dev/null
        ) | sort -u
}

make_tag_2 # FIXME 不知道为什么 make_tag_1 与 make_tag_2 有时输出不同结果, make_tag_2 貌似好些

rm "$TMP_FILE_NAME"


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译