打印本文 打印本文 关闭窗口 关闭窗口
CodeColor相关(二) 基类TCodeColor
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2404  更新时间:2009/4/23 18:27:10  文章录入:mintao  责任编辑:mintao

        第二部分:基类 TCodeColor

        一、本章说明
        暂时先公开基类代码,和子类的部分代码,子类中字符分析函数 Analyzer 的实现暂时不公开,主要出于这样的考虑:
        1、基类已实现大部分共用功能,但是还不完善,代码也不规范。特别是各个版本的 Analyzer 中都会用到这些功能,所以待听取路高手的意见,将基类改进完善后,将重写 Analyzer 并在第三部分中公开;
        2、如果您急于使用本程序,有两种方法:一是您可以留下邮箱地址,我会寄给您一份程序;二是利用并不完善基类 TCodeColor 继承出一个子类,自己实现 Analyzer ,字符分析的方法可以参考 李马  的 行云流水网站  提供的 C 语言版 《Pascal 词法分析器》源代码;
        3、欢迎大家提出宝贵意见、想法,同时尽可能的留下相应的解决方案。

        二、用户端
        很简单,不做过多说明:

//┏━━━━━━━━━━━━━━┓
//┃代码着色:CodeColor v1.0  
//┃来自:悄然无声的 Blog     ┃      
//┗━━━━━━━━━━━━━━┛


procedure TfrmMain.Button1Click(Sender: TObject);
var
  cc:TCodeColor;
begin
  cc:=TCC_Delphi.Create(''''gainsboro'''',720); 
  cc.Source:=Memo1.Text;
  cc.Processor;
  Memo1.Text:=cc.OutPut;
  Memo1.Lines.SaveToFile(''''result.htm'''');
end;


        二、基类 TCodeColor
        也很简单,在注释中已有详细说明。IsAlphaIsNumberic 都用的土方法,或许还有更好的实现方法。IsMBCSChar 是经过滚龙的三次指点才变成现在这个样子的,原先叫 IsHZ ,所以欢迎大家指点一二。 

//┏━━━━━━━━━━━━━━┓
//┃代码着色:CodeColor v1.0  
//┃来自:悄然无声的 Blog     ┃      
//┗━━━━━━━━━━━━━━┛


unit CodeColor;

interface

uses
  Classes,SysUtils;

type
  TCodeColor = class(TObject)
  protected
    FOutPut: string; //处理后的 Html 文本
    FSource: string; //处理前的源文本
    FPosition: Integer; //当前被处理字符的位置
    FBGColor:string; //Html 中表格的背景颜色
    FWidth:string;//Html 中表格的宽度
    ReserveWords: TStrings;//关键字
    
    //抽象的字符分析函数,便于在子类中有不同的实现
    procedure Analyzer; virtual; abstract;

    //下面四个函数在子类中的 Analyzer 中使用
    function GetNextChar: Char;//返回下一个字符
    function IsAlpha(const ch: Char): Boolean; //判断是否是字母
    function IsMBCSChar(const ch: Char): Boolean;//判断字符是否为多字节字符
    function IsNumberic(const ch: Char): Boolean; //判断是否是数字
  public
    constructor Create(const bgColor:string;width:Integer);
    property Source: string write FSource;//属性:设置源文本
    procedure Processor;//处理机
    property OutPut: string read FOutPut; //属性:返回处理后的 Html 文本
  end;
  
implementation

{
********************************** TCodeColor **********************************
}


constructor TCodeColor.Create(const bgColor: string; width: Integer);
begin
   FBGColor:=BGColor;
   FWidth:=InttoStr(width);
end;

//处理机
procedure TCodeColor.Processor;
begin
  FPosition:=0;
  FOutput:='''''''';

  while(FPosition<Length(FSource)) do
  begin
    Analyzer;
  end;

  FOutput:=''''<TABLE BGCOLOR="'''' + FBGColor + ''''" ''''
              + ''''B

[1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口