`
ldb19890624
  • 浏览: 230435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

TabBars代码解读之——代码注释与恢复功能

 
阅读更多
<!-- Search Google -->
Google 输入您的搜索字词 提交搜索表单
<!-- Search Google -->

代码注释就是讲文档窗口中选择的文本编程C/C++语言的注释块,TabBars插件设置这个功能主要是为了简化编程过程中的操作。通常用C风格注释一段代码需要在代码的开始添加/*,并在代码的结束添加*/,用C++风格则是在每行的行首添加//,如果要恢复这些代码就需要再删除这些符号。TabBars插件提供了自动添加和去处这些注释符号的功能,还支持在代码开始处插入时间戳等信息。

添加注释符号有两种风格:C风格和C++风格。TabBars虽然提供了两种风格的注释符号添加方式,但是在某些情况下的处理方式是一样的,比如,当TabBars判断出选择的文本是一行代码中的一段时,通常只使用/**/方式,因为多数情况下用户这样选择是为了注释函数参数或替换表示符,使用/**/更符合用户的意图。

添加注释符号需要首先从文档中得到当前选择的文本块,使用ITextDocument的get_Selection可以得到一个ITextSelection对象,通过ITextSelection对象的四个属性:TopLine,BottomLine,CurrentLine和CurrentColumn可以得到N当前选择的文本的四个位置坐标,这些坐标以行和字符为单位,这几个坐标就是TabBars判断用户是选择了一行代码还是一段代码的依据。以下代码就是对用户选择进行判断并对文本块添加C风格的注释符号的过程:

strText = bstr;
long lStart = 0,lEnd = 0,iColEnd = 0,lCurrent;
pSel->get_TopLine(&lStart);
pSel->get_BottomLine(&lEnd);
pSel->get_CurrentLine(&lCurrent);
pSel->get_CurrentColumn(&iColEnd);
if(lStart == lEnd) //选择在一行上
{
if((lCurrent == lEnd) && (iColEnd > 1))//不是一整行
{
strTmp.Format(_T("/*%s*/"),strText);//依然使用/**/
bstr = strTmp;
pSel->put_Text(bstr);
}
else if((lCurrent == (lEnd + 1)) && (iColEnd == 1))//是一整行
{
strTmp.Format(_T("//%s"),strText);//使用//
bstr = strTmp;
pSel->put_Text(bstr);
}
}
else//选择了多行
{
int idx = 0;
int totalline = lEnd - lStart + 1;

strTmp = _T("/*"); //注释开始符号
if(g_bAddTime && g_bAddUser) //判断是否添加附加注释信息
{
CString strtt;
strTmp += _T("@**#---");//附加信息开始标志
if(g_bAddTime)
{
SYSTEMTIME st;
::GetLocalTime(&st);
strtt.Format(_T("%04d-%02d-%02d %02d:%02d:%02d "),st.wYear,st.wMonth,
st.wDay,st.wHour,st.wMinute,st.wSecond);
strTmp += strtt;
}
if(g_bAddUser)
{
strtt.Format(_T("(%s)"),g_szUser);
strTmp += strtt;
}
strTmp += _T("---#**@");//附加信息结束标志
}
strTmp += _T("/r/n");
strTmp += strText;
strTmp += _T("*/");//注释结束符号

bstr = strTmp;
pSel->put_Text(bstr);//替换选择的文本
}

添加C++风格的注释处理单行文本时和上面的过程一样,但是在处理多行文本时稍有不同,具体就是在每行的行首插入//符号。

恢复代码的过程就是讲注释符号从选择的文本中删除的过程,TabBars插件可以自动识别注释的风格并自动删除注释符号。对于使用/**/注释的文本,选择取消注释时并不一定要严格地选择从/*开始到*/结束的文本,多一点少一点没关系,TabBars插件会自动匹配注释符号。至于使用C++风格的块注释,TabBars会删除每一行的第一个//匹配,不影响其他的行内注释:

strTmp = lpszNull;
int idx = 0;
while((idx = strText.Find(_T("//"),idx)) != -1)
{
bChange = TRUE;
strTmp += strText.Left(idx);
strText = strText.Mid(idx + 2); //过滤 //
idx = strText.Find(_T("/r/n"),0);//跳到行尾
strTmp += strText.Left(idx + 2);//
strText = strText.Mid(idx + 2);//从新行开始找
idx = 0;
}
strTmp += strText;//It is not a good idea, but can void many bugs

分享到:
评论

相关推荐

    TabBars---VC6 IDE增强插件

    持此之外,TabBars还添加了很多实用的功能,比如自动保存文件,C++程序文件和头文件互相切换支持多目录搜索功能,注释选定的代码块,从注释的代码块中恢复代码,为函数添加格式化函数声明,注释代码时自动添加操作者...

    TabBars多标签插件,VC6用,比WndTabs更好用!

    不多说了,用过的都知道,基于WndTabs开发,功能更强大,该zip带有bin文件和源代码! 不需要研究代码的,直接把demo_cn目录下的TabBars.ini和TabBars.dll复制到C:\Program Files\Microsoft Visual Studio\Common\...

    好用的vctabBars

    VC6.0编程的必备工具 里面有两个文件,解压后放到vc安装目录下的msdev98里的addins里

    一个taro适配Android、iOS、微信小程序、H5最佳实践项目的脚手架

    taro适配Android、iOS、微信小程序、H5最佳实践,主要涉及到了基础网络请求的封装、适配了多端的SafeArea安全区域、style工具样式引用替换scss的繁琐写法大幅度简化代码,同时解决了scss样式无法通过className进行属性...

    自定义tabBar

    自定义tabBar,移除系统的tabBar

    H5底部tabbar模板,基于vant组件库及使用最新脚手架搭建

    基于vue开发H5,使用vant的UI组件开发界面,该简单模板 ...3. 使用vuex管理底部tabbars的数据,实现权限控制; 4. 下拉刷新,加载更多示例; 5. 使用上下布局,实现局部更新,支持显示隐藏标题,底部tabbars更新;

Global site tag (gtag.js) - Google Analytics