File Coverage

blib/lib/Text/Greeking/zh_TW.pm
Criterion Covered Total %
statement 65 67 97.0
branch 13 14 92.8
condition 1 3 33.3
subroutine 18 18 100.0
pod 5 12 41.6
total 102 114 89.4


line stmt bran cond sub pod time code
1             package Text::Greeking::zh_TW;
2 3     3   67697 use common::sense 2.02;
  3         81  
  3         22  
3 3     3   165 use 5.008;
  3         9  
  3         106  
4 3     3   1963 use utf8;
  3         16  
  3         16  
5              
6 3     3   99 use List::Util qw(shuffle);
  3         5  
  3         2030  
7              
8             our $VERSION = '1.0';
9              
10             sub new {
11 2     2 1 26 my $class =shift;
12 2         11 my $self = bless {}, $class;
13 2         83 srand;
14 2         10 $self->init;
15             }
16              
17             sub init {
18 2     2 0 13 $_[0]->paragraphs(2,8);
19 2         12 $_[0]->sentences(2,8);
20 2         11 $_[0]->words(5,15);
21 2         9 $_[0];
22             }
23              
24 3     3 1 23 sub paragraphs { $_[0]->{paragraphs} = [ $_[1], $_[2] ] }
25 3     3 1 14 sub sentences { $_[0]->{sentences} = [ $_[1], $_[2] ] }
26 3     3 0 16 sub words { $_[0]->{words} = [ $_[1], $_[2] ] }
27              
28             sub generate {
29 2     2 1 11 my $self = shift;
30 2         9 my($paramin,$paramax) = @{$self->{paragraphs}};
  2         10  
31 2         4 my($sentmin,$sentmax) = @{$self->{sentences}};
  2         12  
32 2         12 my $pcount = int(rand($paramax-$paramin+1)+$paramin);
33 2         4 my $out = "";
34 2         13 for (my $x=0; $x < $pcount; $x++) {
35 11         28 my $scount = int(rand($sentmax-$sentmin+1)+$sentmin);
36 11         30 for (my $y=0; $y < $scount; $y++) {
37 70         298 $out .= random_sentence();
38             }
39 11         37 $out .= "\n\n";
40             }
41 2         22 $out;
42             }
43              
44             sub _generate {
45 18     18   42 my $template = corpus();
46 3     3   14 $template =~ s{ \p{Han} }{ random_word() }xegs;
  3         5  
  3         37  
  18         100  
  2481         3987  
47 18         525 return $template;
48             }
49              
50             {
51             my @han = ();
52             sub random_word {
53 2481 100   2481 0 4870 unless (@han) {
54 18         53 my @char = split "", corpus();
55 18         3073 @han = shuffle grep /\p{Han}/, @char;
56             }
57             shift @han
58 2481         7230 }
59              
60             my @text = ();
61             sub random_paragraph {
62 24 100   24 0 52 unless (@text) {
63 18         33 @text = shuffle split /\n+/, _generate();
64             }
65 24         268 shift @text;
66             }
67              
68             my @sentence = ();
69             sub random_sentence {
70 70 100   70 0 138 unless (@sentence) {
71 24         41 @sentence = split /。|?/, random_paragraph()
72             }
73 70   33     212 (shift(@sentence) || random_sentence() ) . random_punct();
74             }
75              
76             sub random_punct {
77 70     70 0 110 my $r = int(rand(20));
78 70 100       185 if ($r == 1) {
    100          
79 6         32 "!"
80             }
81             elsif ($r == 2) {
82 6         26 "?"
83             }
84             else {
85 58         304 "。"
86             }
87              
88             }
89             }
90              
91             my $corpus;
92             sub add_source {
93 1     1 1 6 my ($self, $source) = @_;
94 1 50       5 if (ref $source) {
95 0         0 warn "err - source sould be a scalar.";
96 0         0 return;
97             }
98              
99 1         3 $corpus .= $source;
100 1         4 return $self;
101             }
102              
103             # lukhnos.org
104             sub corpus {
105 36 100   36 0 60 if ($corpus) {
106 34         369 return $corpus;
107             } else {
108 2         527 return <
109              
110             她終於有勇氣重新開箱,拾出當年所封存的那些記憶。只不過那也是最後一次,那些記憶在開箱之後,不再散發香水的味道;所拾出的東西,也就直接進了垃圾袋。
111              
112             她看著垃圾車的壓縮機輾壓過那些她曾經珍惜過的曾經,然後看著垃圾車駛離。「就這樣,」她想。
113              
114             因為那一年某堂粗淺的人類學課程,讓她心生一計,開始買一個又一個的箱子,把那些碰觸不得的潰爛和難堪,給一一封存起來。離別的痛苦,伴隨著的是碰不得的屍體:生存與死亡的界限,生食與熟食,潔淨與塵垢。葬禮與守喪的時間延遞,是一種轉化的過程:當不潔的屍身再度化為了塵土,不可碰觸的終將化為了無所謂的──可以如清掃家門般將之一掃而出。
115              
116             她花了整整一年的時間,把那些曾經有過的曾經給一一打包、整理、刷洗、更衣,她一邊整理一邊自言自語,哪些是她的初次、她的愚念、她的痴心、她的自甘墮落。來來往往這麼多年,她必須精心計算,購足相當數量的箱子、膠布、標籤紙,那些不可能再穿的衣服也得一一送洗、折疊、包裝。她編目,用圖書館員的耐心一一貼上標籤,空出架位,測量每件物品的大小──用了一半的香水瓶、一件毛衣、一本書、一張大頭照、一張小紙條、兩片CD、一盒太陽眼鏡…… 曾經她一度想將之一一整理販售,但是想到這世界之小,這些物品未來的主人將來說不定碰到原主,或者就只是那些人會在拍賣網站上看到。她雖然復仇心重,卻還是對散心大拍賣這種事有所保留。
117              
118             全部封箱完的那一天,她完全崩潰,累倒在床上,高燒了整整兩天。
119              
120             然後這一切都結束了。至少,暫時如此。
121              
122             那幾年中,箱子就放在她的床下。她家人以為是學生時代的筆記書本,不曾多問。起先她還有睡在回憶上的感覺,之後她搬家、換工作,完完全全與箱子的世界分離了開來,也避開所有重新和那世界回復聯結的可能。不聯絡、不寫信、不和任何可能碰觸到箱子世界的人往來。稍微一點點可能觸及的預感(她這幾年因此嗅覺變得無比敏銳),就立刻送入隱形或擋駕名單。
123              
124             只有在很後來,當她開始想要做更遠距離的移動時,才又突然想起那些箱子的存在。那些丟不掉搬不走的掛念,任何一個箱子都是一條連往過去的通道。那些被貼上封條的通道不會讓她陷落,她感到安全,然而她也不確定她是否哪天會有勇氣,重新開箱啟動這一切,再次於經驗的記憶中走一遭。
125              
126             一直到了那一天。
127              
128             她本來還想再拍張照片的。所謂符號的記憶,所謂的牌位:咒文或碑文,如一個指標般,指向那曾經存在的實體和全部。當一切身體都消逝,還有那符號可以喚起曾經存在的事實。所謂的記憶。然而那一天她發現了這記憶的弔詭:如同照片提醒了箱子的曾經存在,她似乎也可以將照片放置在她心中,用那照片的曾經存在,來指向那些指向了箱子曾經存在的照片。既然如此,拍照與否,又有什麼差別?
129              
130             用刀片將膠布拆開,一一拾起那箱子中的物品時,她突然覺得,她已經和這些一點關係都沒有了──甚至不再是「距離已經很遙遠很遙遠」。距離:兩個實體間存在的空間關係。沒有關係:就連距離也不再存在的事實。沒有了距離也就不再感受到遙遠,那些如深淵般的通道裡傳來的微弱聲響也消失了。於是同樣也沒有了回頭:那稱作這一切起點的單一事件,已經消失在意識的地平面上。
131              
132             她來到了經驗的新島嶼。
133              
134             突然之間,那些放在她房間裡的一個個箱子,變成了外來的異物,路邊的灰塵。
135              
136             開始丟棄那些箱子。不,這並不是否認。否認一件事物的前提是事物的存在。奇異的是她在丟棄之後,竟然得以開口說話。所有過去那些潰爛的難堪的不潔的,所有的恥辱和屈辱和自以為是,突然之間變成可以說的事情。那不只是因為她自己的經驗,或者,毋寧說,那已經不再只是經驗。個人的生命的經驗,隱沒銷融進入一個更廣闊無垠的核當中,那東西不需要任何被貼上封條的通道,也能夠被觸及到。
137              
138             她自己的故事已經變得不是那麼無關緊要了,她想,隱沒進那無垠的才是。因為知道那無垠的存在,她突然覺得如同被釋放了一般。
139              
140             第二天的清醒也因此變得如此值得期待了起來。她開始想獨自說說那隱沒帶下的無垠的事。
141              
142             CORPUS
143             }
144             }
145              
146             1; # Magic true value required at end of module
147             __END__