0

这是Synopse delphi 开源的连字符库。

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

以下是我的测试,但不起作用。它不显示带有连字符(或分隔符)的单词。该库可以在这里下载:

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,该怎么做?

你能帮我理解如何正确使用它吗?

非常感谢。

4

2 回答 2

2

免责声明:我使用了一个不是最近发布的连字符,它可能与最新版本不同步。

以下是我的观点:

分发的编译

  • 我在Delphi 7下编译过,没问题

连字符.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;

下面就ok了(可以参考THyphen类的定义):

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

以下是好的(但它不起作用,因为h作为一个THyphen实例没有正确初始化):

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

你对构造函数的关心

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

这只是设置的正确方法之一THyphen(再次参考THyphen类的定义等)。

例如:

H := THyphen.create('EN');

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

  • 我可以说只要THyphen实例构造正确就可以了(不要忘记包含hyphen.res资源文件{$R hyphen.res},该hyphen.obj文件已经在hyphen.pas单元中链接)。

最后但是同样重要的

  • 请随时与Synopse背后的伟人Arnaud Bouchez 取得联系。他是 Stackoverflow 的成员,并且随时准备提供帮助,而且他还是顶级的用户。
于 2012-04-12T19:43:09.570 回答
1

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

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

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

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

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

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

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

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

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

于 2012-04-12T18:23:46.583 回答