Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1524010
  • 博文数量: 226
  • 博客积分: 3997
  • 博客等级: 少校
  • 技术积分: 2369
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-19 17:26
个人简介

Never save something for a special occasion. Every day in your life is a special occasion.

文章分类

全部博文(226)

文章存档

2018年(5)

2017年(11)

2016年(1)

2015年(17)

2014年(14)

2013年(30)

2012年(5)

2011年(52)

2010年(107)

分类:

2010-12-05 01:09:23

Cpp代码格式化——脚本 FormatCpp.bat
 
功能:
使用 astyle.exe 对 Cpp 代码进行格式化。类似于 VC6.0 的 Alt+F8 的功能。但是 astyle.exe 提供更灵活和强大的格式化能力。
 
关于此批处理的使用,有几种调用方式:
1、直接双击运行。
2、在 sendto 建立快捷方式调用。
3、建立快捷方式并设定热键调用。
4、命令行调用,FormatCpp /h 查看具体参数用法。
 
执行方式的说明:
①、DoubleClick FormatCpp:clip → clip 。
即 将剪贴板中的代码格式化,重新写到剪贴板。
 
②、Sendto FormatCpp:file → clip 。
step1:开始、运行 输入 sendto ,在 sendto 目录建立指向 FormatCpp.cmd 的快捷方式;
step2:然后右键选定欲转换的批处理文件执行发送到建立的快捷方式,转换的代码存于剪贴板。
③、Hotkey for FormatCpp:clip → clip
step1: 在桌面或开始菜单中建立指向 FormatCpp.cmd 的快捷方式,并设定热键(重启explorer生效或在桌面按住F5键十秒种生效)或由 hoekey 等软件代劳。
step2: 然后拷贝欲格式化代码,按下热键就ok了。
 
Code of FormatCpp.bat

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: FormatCpp.bat -- Cpp代码格式化
:: 用法:FormatCpp [/i 输入文件] [/o 输出文件] [/h 显示帮助]
:: 支持文件: winclip.exe astyle.exe
:: 系统:xp
:: 作者:pz
:: 版本:v1.0 - 格式化风格为 ansi
:: 日期:2010年12月5日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

@echo off
setlocal
set path=%path%;%cd%;%~dp0

set error=

rem 文件完整性检查。
for %%i in (winclip.exe astyle.exe) do (
@if "%%~$PATH:i" == "" (
echo 错误:程序所依赖文件 "%%i" 缺失。
set error=错误:程序文件不完整。
) else ( set %%~ni="%%~$PATH:i" )
)

if defined error goto error

rem 测试剪贴板数据类型。
winclip -i |findstr /r ".*_.*TEXT" >nul
if ERRORLEVEL 1 set error=错误:剪贴板为空或内容为非文字数据!

rem 无参数_若未指定输入文件,则获得剪贴板数据,将转换结果复制到剪贴板。
if "%~1" == "" (
if defined error goto error
winclip -p |astyle.exe --style=ansi --pad=oper | winclip -c
echo 格式化完成。clip → clip。按任意键查看结果...
pause>nul
winclip -p | more
pause
goto end
)

rem 一个参数_只有一个参数时尝试作为输入文件处理,当其不存在时作选项开关处理。
if "%~2" == "" (
if exist "%~1" (
astyle.exe --style=ansi --pad=oper < "%~1" |winclip -c
goto end
)
)

set input=
set out=

rem 解析参数表。
:ParseLoop
if "%~1" == "" goto Start
if "%~1" == "/?" goto SwitchH
rem 转到相应标签进行参数处理
for %%s in (i I o O h H) do if "%~1"=="/%%s" goto Switch%%s

set error=错误: 参数格式不正确 - "%1"!
goto error

:SwitchI
set "input=%~2"
if not exist "%input%" set error=警告:输入文件 "%input%" 不存在。 & goto error
goto Next2Arg

:SwitchO
set "out=%~2"
if not defined out set error=警告:未指定输出文件。 & goto error
goto Next2Arg

:Next2Arg
shift
:NextArg
shift
goto ParseLoop


rem 开始格式化

:Start

if defined input (
if defined out (
rem file→file
astyle.exe --style=ansi --pad=oper < "%input%" > "%out%"
) else (
rem file→clip
astyle.exe --style=ansi --pad=oper < "%input%" | winclip -c
)
) else (
if defined out (
if defined error goto error
rem clip→file
winclip -p |astyle.exe --style=ansi --pad=oper > "%out%"
) else (
if defined error goto error
rem clip→clip
winclip -p |astyle.exe --style=ansi --pad=oper | winclip -c
)
)

goto end

rem 错误和帮助信息

:error
echo.%error%
echo.

:SwitchH
echo.Cpp代码格式化
echo.FormatCpp [/i 输入文件] [/o 输出文件] [h 显示帮助]
echo.
echo. /i 指定转换的文件,可包含路径,缺省从剪贴板获得。
echo. /o 指定输出的文件,可包含路径,缺省输出到剪贴板。
echo. /h 显示本简短帮助,等价命令 /?
echo. 本程序执行依赖以下文件 winclip.exe astyle.exe
echo.
pause>nul
:end

效果:

格式化前

enum{
    A =1;
    B=2;
};

main() {
      BYTE i; lcd_init();
// 原本:2句同行

      delay(10);

    while(1) {        
//原本:有多余空格;{ 在while同一行

        
// 原本:注释没有和下一句对齐
lcd_wcmd(0x06);

      lcd_pos(0);
     for(i=0; dis1[ i                ] != '\0'; i++)    
// 原本:[]中有多余空格

         {
       lcd_wdat(dis1[ i ]);
       delay(30);
     }



格式化后:

enum
{
    A = 1;
    B = 2;
};

main()
{
    BYTE i;
    lcd_init();
// 原本:2句同行

    delay(10);

    while (1)
    {        
//原本:有多余空格;{ 在while同一行

        
// 原本:注释没有和下一句对齐
        lcd_wcmd(0x06);

        lcd_pos(0);
        for (i = 0; dis1[ i ] != '\0'; i++)    
// 原本:[]中有多余空格

        {
            lcd_wdat(dis1[ i ]);
            delay(30);
        }


参考:

①批处理代码发帖着色脚本 Batch2ubb(CMD & GAWK)

代码格式化 Artistic Style

附件:

相关工具
FormatCpp的主要功能是由 astyle.exe完成的,剪贴板操作依赖于 winclip.exe。
所需执行文件下载链接:
winclip

astyle 
 
说明:
对于版本 Artistic Style 2.01,FormatCpp.bat 代码需要作以下修改:
--pad=oper

--pad-oper
原因:FormatCpp.bat 使用的ArtisticStyle版本为 xxxx,和 2.01 的选项格式有点区别。
 
其它:
 
可视化版本(office风格)[]
CoolFormat源代码格式化工具
 
JS版
 
 
阅读(2647) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~