在純文本中將文字豎排
是的,你沒看錯~就是要在notepad的text文件中把文字豎排~
//本文技術:Phoeagon。
成品見sourceforge上的chineseportrait(shupai)項目
我們看看近來網上已經有不少在線的converter,很簡單的排字原理,就是開個矩陣的二維數組去模擬~然後一個一個字符填裝。注意根據中國的新國標GB18030中有4字節的漢字。可以這么處理:
function typ(a:string[4]):integer; //GB 18030 Edition {GB18030 四字节支持结构 字节结构 * 单字节,其值从0到0x7F。 * 双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F)。 * 四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。 } begin if Length(a)=0 then Exit(0); if (Ord(a[1])<=$7F)and(Ord(a[1])>=$0)then Exit(1) else if (ord(a[1])>=$81)and(Ord(a[1])<=$FE)and(Ord(a[2])>=$40) and(ord(a[2])<=$FE)then exit(2) else if (Ord(a[1])>=$81)and(Ord(a[1])<=$FE) and(Ord(a[2])>=$30)and(Ord(a[2])<=$39) and(Ord(a[3])>=$81)and(Ord(a[3])<=$FE) and(ord(a[4])>=$30)and(Ord(a[4])<=$39)then Exit(4); Exit(1); end; 這個函數返回輸入的四字節字串從第一個開始第一個GB字符的位數。
還有個半角轉化的問題:
Function conv(k:string[4]): string[4]; //GB 18030 var a:longint; Begin If enc=0 Then exit(k); if length(k)>1 then exit(k); if k=' 'then exit(' ') else begin a:=($A3A1)+ord(k[1])-ord('!'); exit(chr(a shr 8)+chr(a and 255)); end; exit(k);
End;
之後呢還有問題,因為中文的標點是有講究的~例如逗號和句號不能在每行行首,前引號又不能在行末~
winword的設置是:
後置標點:!),.:;?]}¨·ˇˉ─∥’”…:、。〃々〉》」』】〕〗!”’),.:;?〕‵|}∼¢
前置標點:([{·‘“〈《「『【〔〖(.〔{£¥
很可惜基本上網路上的都非常懶!沒人理這些~所以轉換效果那叫一個~
關注這些地方,應該可以基本上寫出一個轉換了~
但是已經由本人寫了一個~
更多見http://chineseportrait.sourceforge.net/
What's the Features? 新特性
- ChinesePortrait 極限豎排 可以使一篇中文寫成的文章按照20世紀早期的豎排的排版風格編排。
風 的 2 的 一 豎 a e C
格 豎 0 文 篇 排 i P h
編 排 世 章 中 t o i
排 的 紀 按 文 可 r n
。 排 早 照 寫 以 極 t e
版 期 成 使 限 r s
使之可以在blog、webspace等環境下實現中文的豎排而不需要額外的第三方支援。
- ChinesePortrait can help one typeset a Chinese paragraph in a verticle way (known as shupai),which can be used in webpages, blogs and various of other environment without third party support.
ChinesePortrait 2.1.8 Beta3 極限豎排
本軟件遵照GPL協議。
這裡有一些實例:http://chineseportrait.sourceforge.net/Gallery.htm
下載(二進制、源碼):http://sourceforge.net/project/platformdownload.php?group_id=235761
PS:本軟件同“假古文”可以防止被文字被PatternMatching&Filtered~


|