如何在delphi中使用此连字符库?

时间:2012-04-12 11:05:48

标签: delphi hyphenation

这是Synopse delphi open source的连字符lib。

该演示是一个控制台应用程序。我不知道如何在GUI应用程序中使用它。

以下是我的测试,但不起作用。它不显示连字符(或分隔符号)的单词。 lib可以是downloaded here:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, hyphen, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure testhyphenator;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.testhyphenator;
var
  h: THyphen;
  s: string;
  F, L: Integer;
begin
  s := 'hyph_en_US.txt'; //this is from the folder, is that correct to call?
  if FileExists(s) then 
  begin
    F := FileOpen(s, fmOpenRead);
    L := FileSeek(F, 0, soFromEnd);
    if L > 0 then 
    begin
      SetLength(s, L);
      FileSeek(F, 0, soFromBeginning);
      FileRead(F, s[1], L);    
    end;
    FileClose(F);
  end;
  h := THyphen.Create(s);
  h.Execute('pronunciation'); //is this correct?
  ShowMessage(h.filllist); //not display hyphenated word
end;

它不显示带连字符的单词。在演示中,我也对构造函数感到困惑:

H := THyphen.create('ISO8859-1'#10'f1f'#10'if3fa/ff=f,2,2'#10'tenerif5fa');
 writeln('"',H.Execute('SchiffahrT'),'"'); writeln(H.FillList);
 ...

作者还附上了obj文件。如果我想将它编译成单个exe,该怎么做?

能帮助我了解如何正确使用它吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

免责声明:我已经利用了最新的连字符分布,它可能与latest version不同步。

以下是我的观点:

分发汇编

  • 我在Delphi 7下编译了它,确定

hyphen.rc文件

  • 分发中没有 hyph_en_EN.dic 文件。如果要重建hyphen.res,可能需要使用以下命令修复 hyphen.rc

连字符文字HYPH_EN_US.dic

  • 我尚未检查其中包含的hyphen.res文件hyph_en_EN.dic和/或hyph_en_US.dic

*。dic我的发行版中可用的文件

  • hyph_it_IT.dic
  • hyph_es_ES.dic
  • hyph_fr_FR.dic
  • hyp_en_US.dic
  • hyp_de_DE.dic

解释您的代码段中的评论

s := 'hyph_en_US.txt'; //this is from the folder, is that correct to call? 

没有!正确的文件扩展名为.dic。你应该写:

s := 'hyph_en_US.dic;

以下是好的(你可以参考THyphen类的定义):

Execute('pronunciation'); // is this correct? 

以下是好的(但它不起作用,因为h实例未正确初始化{/ 1}}:

THyphen

您对构造函数的关注

ShowMessage(h.filllist); //not display hyphenated word

这只是设置H := THyphen.create('ISO8859-1'#10'f1f'#10'if3fa/ff=f,2,2'#10'tenerif5fa'); 的正确方法之一(再次参考THyphen类的定义)。

E.g:

THyphen

使用Delphi 2007在GUI应用程序中使用连字符

  • 只要H := THyphen.create('EN'); 实例构造正确,我就可以说它没关系(别忘了将THyphen资源文件包含在hyphen.res中,{$R hyphen.res}文件已经存在在hyphen.obj单位中链接。

最后但并非最不重要

  • 随时与Arnaud Bouchez背后的伟人Synopse取得联系。他是Stackoverflow的成员,并且随时准备提供帮助,而且还有顶级用户。

答案 1 :(得分:1)

我没有方便的Delphi安装,所以要了解你可能需要稍微调整一下。

查看连字符后,我相信您使用的不正确。构造函数的参数是语言或字符集。

h := THyphen.Create('UTF-8');

或(根据您的文件名,我认为您需要下一个)

h := THyphen.Create('EN');

然后“Execute”用于生成传入的字符串的连字符版本。“Execute”是一个返回新字符串的函数。你正在调用它,但没有对结果做任何事情。

NewStr := h.Execute('correct');

“NewStr”现在应该等于“正确”。

如果我正确阅读了代码,“FillList”函数和过程会返回最后一个执行单词的所有可能的连字符可能性列表。