QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: atfa

编程版面的大牛小牛,发贴前看过来!

[复制链接]
发表于 2003-4-21 00:42:24 | 显示全部楼层
我不加code不行吗?
unit RTFEncode;

interface

uses SysUtils, Classes, LexAnalysis;

type

  TRTFSyntaxLightor = class(TSyntaxLightor)
  private
    function HexToDec(s : string) : string;
    function HexToRGB(s : string) : string;
  protected
    procedure WriteHead; override;
    procedure WriteFoot; override;
    procedure Encode(const s : string); override;
    procedure AddStyle(const s : string; StyleIndex : integer); override;
  end;
implementation

function TRTFSyntaxLightor.HexToDec(s : string) : string;
begin
  Result := IntToStr(StrToInt('$' + s));
end;

function TRTFSyntaxLightor.HexToRGB(s : string) : string;
var
  Red, Green, Blue : string;
begin
  Red := HexToDec(Copy(s, 2, 2));
  Green := HexToDec(Copy(s, 4, 2));
  Blue := HexToDec(Copy(s, 6, 2));
  Result := '\red' + Red + '\green' + Green + '\blue' + Blue + ';';
end;

procedure TRTFSyntaxLightor.WriteHead;
var
  Data : string;
  i : integer;
begin
  Data := '{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \''cb\''ce\''cc\''e5;}}';
  FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
  Data :='{\colortbl ;';
  FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
  for i := 0 to FSyntaxList.Count - 1 do begin
    Data := HexToRGB(FSyntaxList[ i ].Style);
    FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
  end;
  Data := HexToRGB(FSyntaxList.DigitStyle) + '}';
  FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
  Data := '\viewkind4\uc1\pard\cf0\lang2052\f0\fs18';
  FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
end;

procedure TRTFSyntaxLightor.WriteFoot;
var
  Data : string;
begin
  Data := '}';
  FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
end;

procedure TRTFSyntaxLightor.Encode(const s : string);
var
  CurPos, LastPos, Len, SubLen : integer;
  Data : string;
begin
  if s <> '' then begin
    Len := Length(s);
    LastPos := 1;
    while true do begin
      CurPos := LastPos;
      while (CurPos <= Len) and not (s[ CurPos ] in [ '\', '{', '}', cEnter, cNewLine, cTab ]) do inc(CurPos);
      SubLen := CurPos - LastPos;
      if SubLen > 0 then FDestStream.WriteBuffer(s[ LastPos ], SubLen);
      if CurPos > Len then exit;
      case s[ CurPos ] of
        '\' : Data := '\\';
        '{' : Data := '\{';
        '}' : Data := '\}';
        cNewLine : Data := '\par' + cEnter + cNewLine;
        cTab : Data := '\tab ';
      end;
      if s[ CurPos ] <> cEnter then FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
      LastPos := CurPos + 1;
    end;
  end;
end;

procedure TRTFSyntaxLightor.AddStyle(const s : string; StyleIndex : integer);
var
  Data : string;
begin
  if s <> '' then begin
    Data := '\cf' + IntToStr(StyleIndex + 1) + ' ';
    FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
    Encode(s);
    Data := '\cf0 ';
    FDestStream.WriteBuffer(Data[ 1 ], Length(Data));
  end;
end;

end.
回复

使用道具 举报

发表于 2003-4-22 00:36:40 | 显示全部楼层
不用code当然也可以啊, 只是方便其他人阅读而已.

你的颜色是怎么弄出来的? 不要告诉说是一个一个用color设定的啊, 那要很多时间吧.
回复

使用道具 举报

发表于 2003-4-22 11:07:42 | 显示全部楼层
当然是用color设定的啦,不过不是手工设定的,我有专门的设定工具,支持n多种语言。不过这个论坛的帖子显示不支持前导空格,很郁闷,这样子的话,缩进排列就看不出来了。不知道管理员愿不愿意改一下这个问题。
回复

使用道具 举报

发表于 2003-4-23 20:22:04 | 显示全部楼层

试试

[code:1]
int main(int argc,char **argv)
{       
        long time_input;
        if (argc!=2)
        {
                printf("Useage:./ptime time_seconds\n");
                exit(1);
        }
        time_input=atol(argv[1]);
        if (time_input<0)
        {
                printf("Input time error!Useage:./ptime time_seconds\n");
                exit(2);
        }
        ptime(time_input);
        return 0;
}
[/code:1]
回复

使用道具 举报

发表于 2003-5-5 18:29:23 | 显示全部楼层
试用
[code:1]
<?php
echo "HELLO,WORLD";
?>
[/code:1]
回复

使用道具 举报

发表于 2003-5-9 19:45:51 | 显示全部楼层
代码:
[code:1]
asdf
[/code:1]
回复

使用道具 举报

发表于 2003-5-9 23:06:22 | 显示全部楼层
代码:
[code:1]我也来试试[/code:1]
回复

使用道具 举报

发表于 2003-5-11 08:42:35 | 显示全部楼层
[code:1]

是这样吗?

[/code:1]
回复

使用道具 举报

发表于 2003-5-11 10:57:07 | 显示全部楼层
[code:1]是这样吗?[/code:1]
回复

使用道具 举报

发表于 2003-5-12 14:59:44 | 显示全部楼层
[code:1]

hello, linux programming world!

[/code:1]
回复

使用道具 举报

发表于 2003-5-20 21:23:02 | 显示全部楼层
我试试:
#include<istream.h>
using namespace std;
main()
{
  cout&lt;&lt;"Hello word"&lt;&lt;"\n";
}
回复

使用道具 举报

发表于 2003-5-21 15:06:10 | 显示全部楼层
[code:1]
int main&#40;&#41;
&#123;
printf&#40;&quot;Hellow are you!&quot;&#41;;
&#125;
[/code:1]
回复

使用道具 举报

发表于 2003-5-21 19:13:56 | 显示全部楼层
[code:1]
我也想玩玩
[/code:1]
回复

使用道具 举报

发表于 2003-5-25 14:41:10 | 显示全部楼层
[code:1]
   我的代码!^_^
[/code:1]
回复

使用道具 举报

发表于 2003-5-28 17:16:55 | 显示全部楼层
我也试一下!
[code:1]
public static void main&#40;&#41;
&#123;
    //test!
&#125;
[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 03:15 , Processed in 0.076930 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

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