知行社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2687|回复: 0
收起左侧

代码高亮的一种实现

[复制链接]
script 发表于 2011-11-10 20:50 | 显示全部楼层 |阅读模式
  1. /*
  2. * File:   SyntaxHighlighterToHtm.cpp
  3. * Author: xuehaiyisu
  4. * Build 110815
  5. * Powered By GCC 4.5.2
  6. * Created on 2011年8月15日, 下午:
  7. */

  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <fstream>
  11. #include <cstring>
  12. using namespace std;

  13. ifstream infile;
  14. ofstream outfile;


  15. //打印程序信息
  16. void PrintMessage()
  17. {
  18.         cout<<"代码语法高亮工具,使用SyntaxHighlighter3.0.83"<<endl;
  19.         cout<<"的核心代码,使SyntaxHighlighter易于使用,并且"<<endl;
  20.         cout<<"生成不依赖本机的语法高亮代码."<<endl;
  21.         cout<<endl;
  22.         cout<<"xuehaiyisu 修改 2011年8月15日"<<endl;
  23.         cout<<endl;
  24. }


  25. //打开文件并处理
  26. void OpenFile(ofstream &out,string &ext)
  27. {
  28.         cout<<"请输入完整的文件路径"<<endl;
  29.     char *filename;
  30.         filename=new char[50];
  31.     gets(filename);
  32.         infile.open(filename);
  33.         
  34.         while (!infile)
  35.         {
  36.                 cout<<"文件打开失败"<<endl;
  37.                 cout<<"继续吗?(Y/N)"<<endl;
  38.                 string choice;
  39.                 getline(cin,choice);
  40.                 if(choice!="N"&&choice!="n")
  41.                 {
  42.                         cout<<"请重新输入文件路径:"<<endl;
  43.                         gets(filename);
  44.                         infile.open(filename);
  45.                         continue;
  46.                 }
  47.                 else
  48.                 {
  49.                         cout<<"谢谢使用!"<<endl;
  50.                         exit(0);
  51.                 }
  52.                 system("pause");
  53.         }
  54.         cout<<"文件打开成功!"<<endl;
  55.         string str;
  56.         str=(string)filename;
  57.         unsigned int loc=str.rfind('.');                //获得输入文件的扩展名
  58.         ext=str.substr(loc+1);                                        //文件扩展名
  59.         
  60.         char *name;
  61.         name=new char[50];
  62.         strcpy(name,filename);
  63.         strcat(name,".htm");
  64.         out.open(name,ios::out);
  65.         delete [] name;
  66.         delete [] filename;
  67.         cout<<endl;

  68. }

  69. void PrintHead(ofstream &out,string &ext)
  70. {
  71.         ifstream in;
  72.         out<<"<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"" ;
  73.         out<<""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">";
  74.         out<<"<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">";
  75.         out<<"<head>"<<endl;
  76.         out<<"<title>SyntaxHighlighterToHtm</title>"<<endl;
  77.         out<<"<script type="text/javascript">"<<endl;
  78.         in.open("scripts/shCore.js");
  79.         if(!in)
  80.         {
  81.                 cout<<"/scripts/shCore.js不存在,请确认您的SyntaxHighlighter"<<endl;
  82.                 cout<<"的完整性."<<endl;
  83.                 cout<<"程序即将退出..."<<endl;
  84.                 system("pause");
  85.                 exit(0);
  86.         }
  87.         char ch;
  88.         while(in.get(ch))
  89.         {        
  90.                 out<<ch;
  91.         }
  92.         out<<"</script>"<<endl;
  93.         in.close();
  94.         out<<"<script type="text/javascript">"<<endl;
  95.         
  96.         
  97.         char *p;
  98.         p=&ext[0];
  99.         cout<<"文件类型:."<<p<<endl;
  100.         if(strcmp(p,"h")==0||strcmp(p,"c")==0||strcmp(p,"hpp")==0||strcmp(p,"hxx")==0
  101.                 ||strcmp(p,"cxx")==0||strcmp(p,"cc")==0||strcmp(p,"m")==0)
  102.                 strcpy(p,"cpp");
  103.         if(strcmp(p,"htm")==0||strcmp(p,"html")==0)
  104.                 strcpy(p,"java");
  105.         if(strcmp(p,"asp")==0||strcmp(p,"jsp")==0||strcmp(p,"txt")==0)
  106.                 strcpy(p,"xml");
  107.         cout<<"输出类型: ."<<p<<endl;
  108.         char *js;
  109.         js=new char[100];
  110.         strcpy(js,"scripts/shBrush");
  111.         js=strcat(js,p);
  112.         js=strcat(js,".js");
  113.         cout<<"语法高亮:"<<js<<endl<<endl;
  114.         in.open(js);
  115.         if(!in)
  116.         {
  117.                 cout<<endl;
  118.                 cout<<"js文件打开失败,可能是不支持该语言..."<<endl;
  119.                 cout<<"将以默认方式添加语法高亮(默认为cpp)"<<endl;
  120.                 cout<<endl;
  121.                 system("pause");
  122.                 in.close();
  123.                 strcpy(p,"cpp");
  124.                 in.open("scripts/shBrushCpp.js");
  125.                 if(!in)
  126.                 {
  127.                         cout<<"/scripts/shBrushCpp.js不存在,请确认您的SyntaxHighlighter"<<endl;
  128.                         cout<<"的完整性."<<endl;
  129.                         cout<<"程序即将退出..."<<endl;
  130.                         system("pause");
  131.                         exit(0);
  132.                 }
  133.         }
  134.         while(in.get(ch))
  135.         {
  136.                 out<<ch;
  137.         }
  138.         out<<"</script>"<<endl;
  139.         in.close();
  140.         delete [] js;
  141.         
  142.         
  143.         out<<"<style type="text/css" rel="stylesheet">"<<endl;
  144.         
  145.         
  146.         cout<<"使用默认样式?(Y/N)"<<endl;
  147.         string choice;
  148.         getline(cin,choice);//使用getline()不读取换行符
  149.         if(choice!="N"&&choice!="n")
  150.                 in.open("styles/shCoreDefault.css");
  151.         else
  152.         {
  153.                 cout<<"请选择样式:"<<endl;
  154.                 cout<<"1.shCoreDjango.css"<<endl;
  155.                 cout<<"2.shCoreEclipse.css"<<endl;
  156.                 cout<<"3.shCoreEmacs.css"<<endl;
  157.                 cout<<"4.shCoreFadeToGrey.css"<<endl;
  158.                 cout<<"5.shCoreMDUltra.css"<<endl;
  159.                 cout<<"6.shCoreMidnight.css"<<endl;
  160.                 cout<<"7.shCoreRDark.css"<<endl;
  161.                 cout<<"0.shCoreDefault.css"<<endl;
  162.                 cout<<endl;
  163.                 while(1)
  164.                 {
  165.                         string css;
  166.                         getline(cin,css);
  167.                         if(css=="1")
  168.                         {
  169.                                 in.open("styles/shCoreDjango.css");
  170.                                 break;
  171.                         }
  172.                         else if(css=="2")
  173.                         {
  174.                                 in.open("styles/shCoreEclipse.css");
  175.                                 break;
  176.                         }
  177.                         else if(css=="3")
  178.                         {
  179.                                 in.open("styles/shCoreEmacs.css");
  180.                                 break;
  181.                         }
  182.                         else if(css=="4")
  183.                         {
  184.                                 in.open("styles/shCoreFadeToGrey.css");
  185.                                 break;
  186.                         }
  187.                         else if(css=="5")
  188.                         {
  189.                                 in.open("styles/shCoreMDUltra.css");
  190.                                 break;
  191.                         }
  192.                         else if(css=="6")
  193.                         {
  194.                                 in.open("styles/shCoreMidnight.css");
  195.                                 break;
  196.                         }
  197.                         else if(css=="7")
  198.                         {
  199.                                 in.open("styles/shCoreRDark.css");
  200.                                 break;
  201.                         }
  202.                         else if(css=="0")
  203.                         {
  204.                                 in.open("styles/shCoreDefault.css");
  205.                                 break;
  206.                         }
  207.                         else
  208.                         {
  209.                                 cout<<"输入错误!"<<endl;
  210.                                 cout<<"请选择样式:"<<endl;
  211.                                 continue;
  212.                         }
  213.                 }
  214.         }
  215.         if(!in)
  216.         {
  217.                 cout<<"样式文件打开失败,将使用默认样式(shCoreDefault.css)"<<endl;
  218.                 system("pause");
  219.                 in.open("styles/shCoreDefault.css");
  220.                 if(!in)
  221.                 {
  222.                         cout<<"/styles/shCoreDefault.css不存在,请确认您的SyntaxHighlighter"<<endl;
  223.                         cout<<"的完整性."<<endl;
  224.                         cout<<"程序即将退出..."<<endl;
  225.                         system("pause");
  226.                         exit(0);
  227.                 }
  228.         }
  229.         while(in.get(ch))
  230.         {
  231.                 out<<ch;
  232.         }
  233.         out<<"</style>"<<endl;
  234.         in.close();
  235.         out<<"<STYLE type="text/css">"<<endl;
  236.     out<<"TD {"<<endl;
  237.     out<<"FONT-SIZE: 14px; COLOR: #ffffff; FONT-FAMILY: Verdana, ";
  238.         out<<"Arial, Helvetica, sans-serif"<<endl;
  239.     out<<"}"<<endl;
  240.     out<<"</STYLE>"<<endl;
  241.         out<<"<script type="text/javascript">SyntaxHighlighter.all();</script>"<<endl;
  242.         out<<"</head>"<<endl;
  243.         out<<"<body style="background: #c7edcc; font-family: Helvetica">"<<endl;
  244.         out<<"<table cellSpacing=0 cellPadding=0 width="100%" border=0>"<<endl;
  245.     out<<"<TR bgColor=#73a3d4 height=40>"<<endl;
  246.     out<<"<TD noWrap align=center width="100%" >";
  247.         out<<"<h3>SyntaxHighlighterToHtm</h3></TD>"<<endl;
  248.     out<<"</TR>"<<endl;
  249.     out<<"</table>"<<endl;


  250.         out<<"<pre class="brush: "<<p<<";">"<<endl;
  251. }

  252. int main(int argc, char** argv)
  253. {
  254.         while(1)
  255.         {
  256.                 string extention;
  257.                 extention="";
  258.                 PrintMessage();
  259.                 OpenFile(outfile,extention);
  260.                 PrintHead(outfile,extention);
  261.                
  262.                 char ch;
  263.                 while(infile.get(ch))
  264.                 {
  265.                         
  266.                         else if(ch=='<')
  267.                                 outfile<<"&lt;";
  268.                         else if(ch=='>')
  269.                                 outfile<<"&gt;";
  270.                         
  271.                         else
  272.                                 outfile<<ch;
  273.                         cout<<ch;
  274.                 }
  275.                 infile.close();
  276.                 outfile<<"</pre>"<<endl;
  277.                 outfile<<"<table cellSpacing=0 cellPadding=0 width="100%" border=0>"<<endl;
  278.                 outfile<<"<TR bgColor=#73a3d4 height=40>"<<endl;
  279.                 outfile<<"<TD noWrap align=center width="100%" >";
  280.                 outfile<<"<a href="http://user.qzone.qq.com/1443595884/blog/1306500204" target="_blank">ToHtm";
  281.                 outfile<<"</a><br>Aug. 15,2011</TD>"<<endl;
  282.                 outfile<<"</TR>"<<endl;
  283.                 outfile<<"</table>"<<endl;
  284.                 outfile<<"</body>"<<endl;
  285.                 outfile<<"</html>"<<endl;
  286.                 outfile.close();
  287.                 cout<<endl;
  288.                 cout<<"转换成功!已输出自源文件目录"<<endl;
  289.                 cout<<"继续吗?(Y/N)"<<endl;
  290.                 string choice;
  291.                 getline(cin,choice);//使用getline()不读取换行符
  292.                 if(choice=="N"||choice=="n")
  293.                         break;
  294.         }
  295.         cout<<"谢谢使用!"<<endl<<endl;
  296.     system("pause");
  297.     return 0;
  298. }

复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

QQ|小黑屋|手机版|知行技术社区 ( 湘ICP备11020288号-1 )

GMT+8, 2020-10-1 02:30 , Processed in 0.043367 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表