Module: Kansi_valid

Defined in:
lib/kansi_valid/kansi_anaryze.rb,
lib/kansi_valid.rb,
lib/kansi_valid/run.rb,
lib/kansi_valid/inji.rb,
lib/kansi_valid/pick.rb,
lib/kansi_valid/_3ren.rb,
lib/kansi_valid/bouin.rb,
lib/kansi_valid/kanji.rb,
lib/kansi_valid/kohyo.rb,
lib/kansi_valid/kougo.rb,
lib/kansi_valid/be_hyo.rb,
lib/kansi_valid/sample.rb,
lib/kansi_valid/search.rb,
lib/kansi_valid/seikei.rb,
lib/kansi_valid/be_soku.rb,
lib/kansi_valid/nihongo.rb,
lib/kansi_valid/version.rb,
lib/kansi_valid/_24hudou.rb,
lib/kansi_valid/hyousoku.rb,
lib/kansi_valid/kansi_htm.rb,
lib/kansi_valid/check_ouin.rb,
lib/kansi_valid/wiktionary.rb,
lib/kansi_valid/check_okosi.rb,
lib/kansi_valid/check_tuuin.rb,
lib/kansi_valid/check_zekku.rb,
lib/kansi_valid/check_ryouin.rb,
lib/kansi_valid/kansi_comment.rb,
lib/kansi_valid/kansi_generate.rb,
lib/kansi_valid/kansi_organize.rb

Overview

codong:utf-8

Constant Summary collapse

Dic =

全辞書ハッシュ

kanji
Jouyou =

常用漢字の配列

File.read(File.dirname(__FILE__)+"/../www/jouyou_kanji.txt").chomp.split(//)
Ji =

辞書の全ての漢字の配列(ひらがな等は、除外、国字は含む)

File.read(File.dirname(__FILE__)+"/../www/kanji_list.txt").chomp.split(//)
Version =
'0.0.12'
CHENGE_LOG =
"'0.0.12' checked windows.
'0.0.11' #Kansi_valid::run (add)
'0.0.10' 0.0.9 error in rdoc(win7) 
'0.0.9' BugFixed kansi_valid.rb (RUBY >=1.9)ENCODING ERROR on Windows7(or later) console.
'0.0.8' kansi_valid Bug fixed.(_bouin word+=...)
'0.0.7' Also use NameSpace (module_function add).
'0.0.6' Rdoc error fixed. UnitTest add.
'0.0.5' search() add.
'0.0.4' Linux support. ,delete 'win32ole' 
'0.0.3' for win 2009.2.6Takayasu_H
'0.0.2' some bug fix  
'0.0.1' first on windows XP. Thanks Kantarou(Author:Jigen Konou),and its great dictionary."

Class Method Summary collapse

Class Method Details

._24hudou(a, zekku) ⇒ Object

24不同、26対を評価する。 trueが正しい falseは正しくない nilは評価不能を示す。 _24hudou(poem_string(詩),zekku=(5 or 7))



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
# File 'lib/kansi_valid/_24hudou.rb', line 10

def _24hudou(a,zekku)
  #p a
  if zekku
    #p a
    #p a[0][3]
    if zekku==7
      case a[0][3]
      when ""
        bool1=
        be_soku(a[1][3])&&
        be_soku(a[2][3])&&
        be_hyo(a[3][3])&&
        
        be_soku(a[0][7])&&
        be_hyo(a[1][7])&& 
        be_hyo(a[2][7])&&
        be_soku(a[3][7])&&
        
        be_hyo(a[0][11])&&
        be_soku(a[1][11])&&
        (be_soku(a[2][11]) || be_soku(a[2][9]))&&#挟み平
        be_hyo(a[3][11])
        
        bool2=
        be_hyo(a[1][3])&&
        be_hyo(a[2][3])&&
        be_soku(a[3][3])&&
        
        be_hyo(a[0][7])&&
        be_soku(a[1][7])&& 
        be_soku(a[2][7])&&
        be_hyo(a[3][7])&&
        
        be_soku(a[0][11])&&
        be_hyo(a[1][11])&&
        be_hyo(a[2][11])&&
        be_soku(a[3][11])

        #p bool
        return (bool1 or bool2)

      when ""
        bool=
        be_soku(a[1][3])&&
        be_soku(a[2][3])&&
        be_hyo(a[3][3])&&
        
        be_soku(a[0][7])&&
        be_hyo(a[1][7])&& 
        be_hyo(a[2][7])&&
        be_soku(a[3][7])&&
        
        be_hyo(a[0][11])&&
        be_soku(a[1][11])&&
        (be_soku(a[2][11]) || be_soku(a[2][9]))&&#挟み平
        be_hyo(a[3][11])

        #p bool
        return bool
      when ""
        bool=
        be_hyo(a[1][3])&&
        be_hyo(a[2][3])&&
        be_soku(a[3][3])&&
        
        be_hyo(a[0][7])&&
        be_soku(a[1][7])&& 
        be_soku(a[2][7])&&
        be_hyo(a[3][7])&&
        
        be_soku(a[0][11])&&
        be_hyo(a[1][11])&&
        be_hyo(a[2][11])&&
        be_soku(a[3][11])
        return bool
      end
    elsif zekku==5
      case a[0][3]
      when ""
        bool1=
        be_soku(a[1][3])&&
        be_soku(a[2][3])&&
        be_hyo(a[3][3])&&
        
        (be_soku(a[0][7])|| be_hyou(a[0][7]))&&
        be_hyo(a[1][7])&& 
        be_hyo(a[2][7])&&
        be_soku(a[3][7])
        
        bool2=
        be_hyo(a[1][3])&&
        be_hyo(a[2][3])&&
        be_soku(a[3][3])&&
        
        be_hyo(a[0][7])&&
        be_soku(a[1][7])&& 
        (be_soku(a[2][7])||be_soku(a[2][5]))&&#挟み平
        be_hyo(a[3][7])
        return (bool1 or bool2)


      when ""
        bool=
        be_soku(a[1][3])&&
        be_soku(a[2][3])&&
        be_hyo(a[3][3])&&
        
        (be_soku(a[0][7])|| be_hyou(a[0][7]))&&
        be_hyo(a[1][7])&& 
        be_hyo(a[2][7])&&
        be_soku(a[3][7])
        return bool
      when ""
        bool=
        be_hyo(a[1][3])&&
        be_hyo(a[2][3])&&
        be_soku(a[3][3])&&
        
        be_hyo(a[0][7])&&
        be_soku(a[1][7])&& 
        (be_soku(a[2][7])||be_soku(a[2][5]))&&#挟み平
        be_hyo(a[3][7])
        return bool
      end
    else
      return false
    end
  else
    return false
  end
  #評価されなかったら、最終値はnil
  nil
end

._3ren(a) ⇒ Object

下三連禁。trueがOKということ



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/kansi_valid/_3ren.rb', line 6

def _3ren(a)
  bool=false
  0.upto(3) do |x|
    bool=bool ||
    ((a[x][-1].include?("")||(a[x][-1].include?("")) && x!=2)&&
    a[x][-3].include?("")&&
    a[x][-5].include?(""))||
    (a[x][-1].include?("")&&
    a[x][-3].include?("")&&
    a[x][-5].include?(""))
  end
  return !bool
end

.be_hyo(ji) ⇒ Object

○平であることにtrue 参照 hyosoku,be_soku



8
9
10
11
# File 'lib/kansi_valid/be_hyo.rb', line 8

def be_hyo(ji)
  #puts Kconv.tosjis ji
  ji.include?("") or ji.include?("")
end

.be_soku(ji) ⇒ Object

●仄であることにtrue 参照 hyosoku,be_hyo



8
9
10
11
# File 'lib/kansi_valid/be_soku.rb', line 8

def be_soku(ji)
  #puts Kconv.tosjis ji
  ji.include?("") or ji.include?("")
end

.bouin(a, zekku, ouIn) ⇒ Object

冒韻を調べる。trueがOKということ。 bouin(poem_string(詩),zekku=(5or7),ouIn=(ex.“東”))



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/kansi_valid/bouin.rb', line 7

def bouin(a,zekku,ouIn)
#(押韻)の数を引き算で調べる
  _in=a.flatten.size-((a.flatten-[ouIn]).size)# =>2,3,4など
  if zekku==5
    if _in==2
      #五言絶句の通常の韻の数==2
      return true
    elsif _in==3
      #五言絶句で、第一句が韻ならOK(==3)
      if a[0][8]==ouIn
        return true
      else 
        return false
      end
    else
      #五言のそれ以外は冒韻またはエラー
      return false
    end
  elsif zekku==7
    if _in==3 or (_in==2 && a[0][12]!=ouIn)
      return true
    else
      #それ以外はエラー
      return false
    end
  else
    #絶句にあてはまらないものはnil
    return nil
  end
  nil#どれにもあてはまらない(??)
end

.check_okosi(kekka) ⇒ Object

起式のチェック(2番目文字の平仄記号を返す)



6
7
8
9
10
11
12
# File 'lib/kansi_valid/check_okosi.rb', line 6

def check_okosi(kekka)

  kekka.encode("utf-8") unless RUBY_VERSION < "1.9.0"

  x=kekka.split(//)
  return x[3]# =>○●、■◇?など
end

.check_ouin(kekka) ⇒ Object

漢詩4句の最後の語句ex.“青○隊●遇●東◇元○”の最後の‘元’を取り出す。



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/kansi_valid/check_ouin.rb', line 6

def check_ouin(kekka)

  array=kekka.split(/\n/)# =>四句のリスト
  
  if RUBY_VERSION < "1.9.0"
    return array[3].chomp.split(//)[-2]# =>'元'
  else
    x=array[3].split(//)
    return x[((x.size)/2-1)*2]# =>'元'
  end
end

.check_ryouin(kansi) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/kansi_valid/check_ryouin.rb', line 22

def check_ryouin(kansi)
  #ex.
  #kansi="妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
  kekka=""
  kansi.split(//).each do |ji|
    begin
      a=Dic[ji]
      if a[4]#=="◇"
        kekka+=ji+":"+a[4]+":"+a[5]+":"+a[7]+":"+a[8]+":"+a[10]+"\n"
      end
    rescue
      kekka+="\n"
      next
    end
  end
  return kekka
end

.check_ryouin_table(kansi) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/kansi_valid/check_ryouin.rb', line 5

def check_ryouin_table(kansi)
  #ex.
  #kansi="妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
  kekka=""
  kansi.split(//).each do |ji|
    begin
      a=Dic[ji]
      if a[4]#=="◇"
        kekka+="<tr><td>"+ji+"</td><td>"+a[4]+"</td><td>"+a[5]+"</td><td>"+a[7]+"</td><td>"+a[8]+"</td><td>"+a[10]+"</td></tr>\n"
      end
    rescue
      kekka+="\n"
      next
    end
  end
  return kekka
end

.check_tuuin(a, zekku, ouIn) ⇒ Object

通韻のチェック



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/kansi_valid/check_tuuin.rb', line 6

def check_tuuin(a,zekku,ouIn)
  #print a
  #print zekku
  #print ouIn
  if zekku!=nil
    #七言絶句
    if zekku==7
      #p ouIn
      #p a[0][12]
      return (ouIn==a[0][12] && ouIn==a[1][12] && ouIn==a[3][12])
    #五言絶句
    elsif zekku==5
      #p ouIn
      #p a[1][8]
      return (ouIn==a[1][8] && ouIn==a[3][8] && (ouIn==a[0][8]) or be_soku(a[0][8]))
    #その他(false)
    else
      return false
    end
  else
    return false
  end
  false
end

.check_zekku(kekka) ⇒ Object

五言なら5、七言なら7、それ以外nil



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/kansi_valid/check_zekku.rb', line 6

def check_zekku(kekka)

  if RUBY_VERSION < "1.9.0"
    check=kekka.split(/\n/)[0].size/3
  else
    check=kekka.split(/\n/)[0].size
  end
  
  if check==7
    zekku=7
  elsif check==5
    zekku=5
  else
    zekku=nil
  end
  zekku
end

.dicObject



192
# File 'lib/kansi_valid.rb', line 192

alias dic check_ryouin

.generateObject



201
# File 'lib/kansi_valid.rb', line 201

alias generate kansi_generate

.generate2Object



202
# File 'lib/kansi_valid.rb', line 202

alias generate2 kansi_generate2

.html_endObject



20
21
22
23
24
25
# File 'lib/kansi_valid/kansi_htm.rb', line 20

def html_end
_end='
    <br/><a href="#first">(top)</a></div>
  </body>
</html>'
end

.html_head(title = "kansi_htm") ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/kansi_valid/kansi_htm.rb', line 5

def html_head(title="kansi_htm")
head = <<EOS
<html>
  <head>
    <meta http-equiv="Content-Language" content="ja" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <link rel="stylesheet" type="text/css" href="../css/str.css" title="str"/>
    <title>#{title}</title>
  </head>
  <body>
    <div class="tate"><a name="first"></a>
EOS
return head
end

.hyosokuObject



194
# File 'lib/kansi_valid.rb', line 194

alias hyosoku hyousoku

.hyosoku_htm(str) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/kansi_valid/kansi_htm.rb', line 37

def hyosoku_htm(str)
    moji=str
      #p moji
      result=Dic[moji]#dic_file="kanji_utf8.txt" array or nil
      
      case result
      when nil
        nil
      else
        begin
          plus=result[5].split(//).last+result[4]#辞書データ(韻、平仄○●)の出力
        rescue
          nil#国字、ひらがななど(辞書に載っていて平仄のないもの)
        end
      end
      #p result[4]
      #p result[5]
end

.hyosoku_to_ruby_htm(str) {|kekka| ... } ⇒ Object

Yields:

  • (kekka)


101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/kansi_valid/kansi_htm.rb', line 101

def hyosoku_to_ruby_htm(str)
  kekka=""
  #head
  kekka+=html_head
  ##core
  str.split(//).each do |ji|
    kekka+="<br/>" if ji=="\n"
    result=hyosoku_htm(ji)
    kekka+=rubi(ji,result)
  end
  
  #end
  kekka+=html_end
  
  yield kekka if block_given?
  return kekka
end

.hyousoku(str) ⇒ Object

str = “a妙花薫染宿平原n常國春風日日温n訓読真看般若頌n問尋経内悟空門” hyousoku(str)# => “?a嘯●麻○文○炎●屋●庚○元○

陽○職●真○東◇質●質●元○
問●屋●真○寒◇寒○薬●宋●
問●侵○青○隊●遇●東◇元○"


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/kansi_valid/hyousoku.rb', line 10

def hyousoku(str)
  kekka=""

  str.encode("utf-8") unless RUBY_VERSION < "1.9.0"

  str.split(//).each do |moji|
    #p moji
    result=Dic[moji]#dic_file="kanji_utf8.txt" array or nil
    case result
    when nil
      if moji=~/\s/
        plus=moji#改行などはそのまま返す
      else
        plus=""+moji#空白以外で変換できなかったnil
      end
    else
      begin
        plus=result[5].split(//).last+result[4]#辞書データ(韻、平仄○●)の出力
      rescue
        plus=""+moji#国字、ひらがななど(辞書に載っていて平仄のないもの)
      end
    end
    kekka+=plus
    #p result[4]
    #p result[5]
  end
  kekka
end

.injiObject

平韻の30種の配列



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/kansi_valid/inji.rb', line 6

def inji
str=["東翁窮宮弓攻洪功公工紅鴻終充戎崇聡叢衷沖忠虫通筒桐瞳銅同童風楓豊蓬蒙朦濛雄熊融隆朧瓏空虹中凍夢滝籠",
"冬凶恭胸宗鐘松衝鍾憧農濃封峰逢蜂烽容蓉竜供従縦重縫溶",
"江釭缸腔双窓撞邦双降淙滝",
"支医移萎惟帷危奇飢期規旗肌姫基窺其岐嬉羇欺犠疑儀宜資師詩肢脂糸枝詞芝姿諮雌私獅之匙屍祠巵而慈辞時児持炊垂錐誰衰随笞池知痴馳追碑卑悲皮疲眉琵唯離罹梨籬為遺涯机騎崎差思司治推吹施遅累",
"微威囲違依祈帰輝希機揮稀譏磯饑非妃肥扉飛霏緋衣幾崎誹",
"魚於居虚裾渠墟漁初書諸舒如徐除疎儲余餘廬驢嘘車且与誉予",
"虞烏迂区駒倶愚隅枯孤湖弧呼胡姑糊壺娯吾拘朱株殊珠濡需儒須図枢趨粗租蘇廚誅徒途都塗屠奴符夫敷扶膚無模輸愉諛炉蘆悪汚駆舗摸",
"斉携渓鶏閨畦蹊谿袿西淒悽栖臍棲凄啼梯提堤低批迷稽妻題締泥",
"佳鞋諧偕階懐皆街骸崖斎釵排俳牌埋淮蛙蝸涯柴",
"灰哀埃開廻徊該孩才裁催災猜纔哉材財胎頽苔台杯盃梅媒煤枚雷来魁隈栽推駘堆培",
"真姻因均巾銀春純旬遵循巡醇淳馴臣紳新親唇神薪津辛伸呻身申辰晨脣仁人塵珍賓頻浜貧民罠隣倫輪燐鱗諄振娠陳",
"文慇雲耘云斤欣芹筋勤懃勲薫君裙醺燻軍群雰墳紛焚氛蚊紋分聞",
"元猿園寃援温恩垣軒腱喧言原源昆昏痕坤婚魂根尊樽村存屯豚呑藩繁幡蕃煩番奔翻盆門渾孫噴論",
"寒安鞍刊奸竿肝官韓寛干完歓丸酸餐残丹灘箪端壇檀団般搬磐盤饅欄蘭闌乾冠棺観看歎嘆単弾難漫瀾",
"刪関閑環姦艱菅顔頑山班攀蛮湾間還",
"先煙沿鉛延筵淵円鳶懸賢肩堅権虔拳玄弦舷絃栓泉遷川銭千宣仙船詮箋蝉煎専穿然全前天巓田年燃辺編偏篇翩鞭眠綿連蓮聯漣憐咽縁乾県圏研鮮扇旋禅伝便",
"蕭橋嬌驕梟昭消焦招宵蕉椒樵条饒朝潮跳凋超彫蜩標瓢飄描苗猫謡窯腰揺遙妖寮聊遼寥焼調挑漂要夭僚料",
"肴郊交敲哮抄梢巣嘲胞泡包咆庖抛茅教咬",
"豪高尻毫濠曹遭槽艘掻糟繰騒刀陶逃桃淘濤萄褒毛牢号操労",
"歌阿科渦河靴何苛渦訛俄蛾唆娑多他波婆摩魔羅倭荷過蓑蛇駄那頗磨和",
"麻鴉家加華花瓜蝦嘉霞芽牙誇査些砂裟沙紗遮斜奢邪茶耶巴琶爺窪差涯蝸蛙車蛇",
"陽央狂航荒慌皇香黄綱鋼光康昂岡篁徨杭剛粧商章彰昌傷詳祥床牀嘗翔廂裳墻薔嬢常場娘荘倉桑霜装蒼箱腸糖唐塘堂芳方坊肪忙亡房防茫揚楊羊洋涼良糧郎廊狼王強郷慶行将償障相喪創蔵長張当湯彷傍望妨忘量浪",
"庚営栄英盈桜驚京卿兄傾軽茎鯨坑耕宏衡晶城情精牲清声成生晴誠征甥偵貞呈程坪兵平萌棚明盟名鳴盲横頃頸迎行更請盛正争丁評膨令",
"青刑型形蛍馨星庁亭停庭廷汀寧瓶屏銘冥鈴霊齢伶玲零経醒聴丁町釘",
"蒸鷹恒承昇升縄丞仍層僧曽憎懲徴澄謄灯騰登藤氷憑崩朋鵬薨蠅陵稜綾応興矜凝称勝乗烝増能",
"尤鴎謳丘球求休鳩仇裘毬牛侯猴喉鉤溝週秋愁修収州酋羞洲囚舟周酬讐蒐柔揉捜抽儔疇兜頭投浮謀矛眸油郵遊憂幽優悠猶由游偸硫流留瑠榴楼欧蹂不瘤",
"侵陰音淫襟金琴禽欽衾衿襟岑檎擒吟今心深森斟箴鍼簪尋沈砧臨林淋琳霖禁浸針任妊",
"覃庵甘堪柑酣含参慚慙潭譚耽痰男談貪曇南楠壜嵐藍三函担探擔",
"塩檐淹嫌謙兼厳尖繊籤瞻髯添霑粘廉簾鎌炎占潜",
"咸銜鹹緘岩巌杉衫凡鑑函監讒帆"
]
end

.kanji(dic_file = File.dirname(__FILE__)+"/../../www/dic.txt") ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/kansi_valid/kanji.rb', line 5

def kanji(dic_file=File.dirname(__FILE__)+"/../../www/dic.txt")
    dic={}
    data=File.read(dic_file)
    data.each_line do |list|
      data=list.chomp.split(";")
      dic[data[0]]=data
    end
  return dic
end

.kansi_Object



195
# File 'lib/kansi_valid.rb', line 195

alias kansi_ kansi_organize

.kansi_analyze(kekka) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/kansi_valid/kansi_anaryze.rb', line 6

def kansi_analyze(kekka)
    a=[]
    x=kekka.split(/\n/)
    x.each do |str|
      b=str.chomp.split(//)
      #p b.size #14 or 10
      a << b
    end
  return a
end

.kansi_comment(str) ⇒ Object

コメント分の切り出し(#で始まる行)

ex.  str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
       =>"#komento\n"


8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/kansi_valid/kansi_comment.rb', line 8

def kansi_comment(str)
  kekka=""
  str.split(/\n/).each do |x|
    #p x
    #kekka+= x
    if x.split(//).first=='#'
      kekka+=x
    else
    end
  end
  kekka  # =>"#komento\n"
end

.kansi_generate(zekku = 7, keyword = [], ouin_ = nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/kansi_valid/kansi_generate.rb', line 27

def kansi_generate(zekku=7,keyword=[],ouin_=nil)
#p zekku
#p keyword
#p ouin_

#**韻をリストアップしておく
#puts list.size#30

#**常用漢字を調べる
  jouyou_kanji=Jouyou
#puts randsize=jouyou_kanji.size#1945
#puts jouyou_kanji[rand(randsize)]

#**韻字をランダムに選択する
#**決まっているときはそれを選択
ouin=""
begin
  if  ouin_!=nil
    #inji==韻リスト(30平韻の配列)
    inji.each do |ji|
      #p ji
      if ji.include?(ouin_)
        ouin =ji.split(//)
        break
      end
    end
  else
    ouin=inji[rand(30)].split(//)
  end
#  rescue
#    ouin_=nil
#    retry
end


jouyou_kanji=jouyou_kanji-ouin #韻を候補から削除
inn=pick(ouin,3)[0]

#**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)

#x,y=put_char("○",[jouyou_kanji,inn])

list=[jouyou_kanji,inn]

#main program
hyo_7=["◇○◇●●○◎
◇●◇○○●◎
◇●◇○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●○○◇●◎
◇●◇○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●◇○○●◎
◇●○○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●◇○○●◎
◇●○○●○●
◇○◇●●○◎",
"◇○◇●●○◎
◇●○○◇●◎
◇●○○●○●
◇○◇●●○◎"]

soku_7=[
"◇●○○◇●◎
◇○◇●●○◎
◇○◇●◇○●
◇●○○◇●◎",
"◇●◇○○●◎
◇○◇●●○◎
◇○◇●◇○●
◇●○○◇●◎",
"◇●○○◇●◎
◇○◇●●○◎
◇○◇●◇○●
◇●◇○○●◎",
"◇●◇○○●◎
◇○◇●●○◎
◇○◇●◇○●
◇●◇○○●◎"]

hyo_5=[
"◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
"◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
"◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
"◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
"◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
"◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
"◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
"◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
soku_5=[
"◇●◇○●
○○◇●◎
◇○○●●
○●●○◎",
"◇●◇○●
○○◇●◎
○○●○●
○●●○◎",
"◇●◇○●
◇○○●◎
◇○○●●
○●●○◎",
"◇●◇○●
◇○○●◎
○○●○●
○●●○◎"]

if zekku==7 #七言絶句生成
if rand(2)==0#平仄の振り分け
#七言○
x,y=pick(hyo_7)#規則の選択(yはダミー)
#print Kconv.tosjis x[0]
poem=poetter(x[0],list)#list は[漢字配列,韻配列]であること。
else
#七言●
#7●
x,y=pick(soku_7)
#print Kconv.tosjis x[0]
poem=poetter(x[0],list)
end
elsif zekku==5 #五言絶句生成
if rand(2)==0
#五言○
  x,y=pick(hyo_5)
  poem=poetter(x[0],list)
  else
#五言●
x,y=pick(soku_5)
poem=poetter(x[0],list)
end
end
return poem
#**先のキーワードを入れる
#**残りの字をランダムに抜き取る
#**これで準備完了
#*リストからランダムに選び出す
#**選んだ字を当てはめる
#**残りをランダムに作成する。
  
end

.kansi_generate2(zekku = 7, keyword = [], ouin_ = nil) ⇒ Object



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
# File 'lib/kansi_valid/kansi_generate.rb', line 172

def kansi_generate2(zekku=7,keyword=[],ouin_=nil)
#p zekku
#p keyword
#p ouin_

#**韻をリストアップしておく
#puts list.size#30

#**常用漢字を調べる
  jouyou_kanji=Jouyou
#puts randsize=jouyou_kanji.size#1945
#puts jouyou_kanji[rand(randsize)]

#**韻字をランダムに選択する
#**決まっているときはそれを選択
ouin=""
begin
  if  ouin_!=nil
    #inji==韻リスト(30平韻の配列)
    inji.each do |ji|
      #p ji
      if ji.include?(ouin_)
        ouin =ji.split(//)
        break
      end
    end
  else
    ouin=inji[rand(30)].split(//)
  end
#  rescue
#    ouin_=nil
#    retry
end


jouyou_kanji=jouyou_kanji-ouin #韻を候補から削除
inn=pick(ouin,3)[0]

#**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)

#x,y=put_char("○",[jouyou_kanji,inn])

list=[jouyou_kanji,inn]

#main program
hyo_7=["◇○◇●●○◎
◇●◇○○●◎
◇●◇○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●○○◇●◎
◇●◇○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●◇○○●◎
◇●○○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●◇○○●◎
◇●○○●○●
◇○◇●●○◎",
"◇○◇●●○◎
◇●○○◇●◎
◇●○○●○●
◇○◇●●○◎"]

soku_7=[
"◇●○○◇●◎
◇○◇●●○◎
◇○◇●◇○●
◇●○○◇●◎",
"◇●◇○○●◎
◇○◇●●○◎
◇○◇●◇○●
◇●○○◇●◎",
"◇●○○◇●◎
◇○◇●●○◎
◇○◇●◇○●
◇●◇○○●◎",
"◇●◇○○●◎
◇○◇●●○◎
◇○◇●◇○●
◇●◇○○●◎"]

hyo_5=[
"◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
"◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
"◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
"◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
"◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
"◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
"◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
"◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
soku_5=[
"◇●◇○●
○○◇●◎
◇○○●●
○●●○◎",
"◇●◇○●
○○◇●◎
○○●○●
○●●○◎",
"◇●◇○●
◇○○●◎
◇○○●●
○●●○◎",
"◇●◇○●
◇○○●◎
○○●○●
○●●○◎"]

if zekku==7 #七言絶句生成
if rand(2)==0#平仄の振り分け
#七言○
x,y=pick(hyo_7)#規則の選択(yはダミー)
#print Kconv.tosjis x[0]
poem=poetter(x[0],list)#list は[漢字配列,韻配列]であること。
else
#七言●
#7●
x,y=pick(soku_7)
#print Kconv.tosjis x[0]
poem=poetter(x[0],list)
end
elsif zekku==5 #五言絶句生成
if rand(2)==0
#五言○
  x,y=pick(hyo_5)
  poem=poetter(x[0],list)
  else
#五言●
x,y=pick(soku_5)
poem=poetter(x[0],list)
end
end

return poem
#**先のキーワードを入れる
#**残りの字をランダムに抜き取る
#**これで準備完了
#*リストからランダムに選び出す
#**選んだ字を当てはめる
#**残りをランダムに作成する。
  
end

.kansi_htm(str) ⇒ Object



147
148
149
# File 'lib/kansi_valid/kansi_htm.rb', line 147

def kansi_htm(str)
  special_htm(str,8)
end

.kansi_organize(str) ⇒ Object

漢詩部分の切り出し(#で始まる行は読みとばす)

半角英数の削除
改行のみ,""," "などの行も読みとばす
ex.  str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
                 =>"妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/kansi_valid/kansi_organize.rb', line 10

def kansi_organize(str)
  kansi=""
  str2=""
  str.each_line do |line|
    unless line.include?("#")
      str2+=line
    end
  end
  str=str2
  #"妙花薫染宿平原 常國春風日日温 訓読真看般若頌 問尋経内悟空門"半角空白の分割であれば評価可能
  str=str.chomp.gsub(" ","\n")
    str.split(/\n/).each do |x|
      x+="\n"
      
      #print x.encode("sjis") #RUBY_VERSION >= "1.9.0"
      if x.split(//).first=='#'
      elsif x=~/^$/
      else
        a=x.gsub(/[0-9A-Za-z]/,"")
        a=a.gsub(/ /,"")
        kansi+=a
      end
    end
  kansi=kansi.gsub("\n\n","\n")
  kansi=last_split(str)
  kansi.chomp  # =>"妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
end

.kansi_valid(str) ⇒ Object Also known as: kv, valid

kansi_valid(String) 絶句ならば禁則評価と辞書の結果表示、research dictionary and answer,validate

kansi_valid(sample)
                 # =>#偶成 朱熹
                     少年易老学難成
                     一寸光陰不可軽
                     未覚池塘春草夢
                     階前梧葉已秋声

                    # 庚 平起
                    #篠●先○陌●皓●覚●寒◇庚○
                    #質●願●陽○侵◇物◇哿●庚◇
                    #未●覚●支○陽○真○皓●東◇
                    #佳○先○虞◇葉●紙●尤○庚○
                    #Valid 絶句(Ver0.0.6)
                    #2013-01-03 22:58:18 +0900

                    #少:●:篠:嘯:ショウ:すくない すこし わかい
                    #年:○:一先::ネン:とし よわい みのり
            以下省略#

kv(sample)             # =>同上、   same above
valid(sample)          # =>同上、   same above


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/kansi_valid.rb', line 50

def kansi_valid(str)
  begin
    comment=kansi_comment(str)#コメントの切り出し
    kansi=kansi_organize(str)# =>整形(半角英数、半角空白など外す)
    kekka=hyousoku(kansi)
  
  warning=""#警告コメント
    #日本語かどうかの評価
    _nihongo=nihongo(kekka)
    if _nihongo==true
      warning+="#Error:including Japanene or undefined char.\n"
    end
    
    zekku=check_zekku(kansi)# =>5,7,nil
    
    ouIn=check_ouin(kekka)# =>東、元など
    okosi=check_okosi(kekka)# =>○●■◇?など
      #data<<韻、起し
      if okosi==""
        data="\n\n# #{ouIn} 仄起\n"
      elsif okosi==""
        data="\n\n# #{ouIn} 平起\n"
      else
        data="\n\n# #{ouIn} #{okosi}起\n"
      end
    #漢詩としての評価はじめ
    a=kansi_analyze(kekka)#kekkaの分割
    
    #通韻チェック
    tuuIn=check_tuuin(a,zekku,ouIn)#true or false
    unless tuuIn
      warning+="# 違反・押韻(又は両韻字)\n"
    end
    
    #二四不動(挟み平(転句)はOK)
    #二六対(挟み平(転句)はOK)
    hudo=_24hudou(a,zekku)
    unless hudo
      warning+="# 違反・二四不同、二六対(又は両韻字)\n"
    end
    
    #下三連禁
    _simo3ren=_3ren(a)
    unless _simo3ren
      warning+="# 警告・下三連禁(下平三連、下仄三連)(又は両韻字)\n"
    end
    
    #二弧平禁(七言は四弧平禁)
    _kohyo=kohyo(a,zekku)
    unless _kohyo
      warning+="# 警告・二弧平禁(七言は四弧平禁)\n"
    end
    
    #冒韻禁,韻字の句内での重複
    _bouin=bouin(a,zekku,ouIn)&&tuuIn#韻を踏んで(tuuin==true)更にbouin==true
    p warning if $DEBUG
      warning="#Valid 絶句(Ver#{Version})\n##{Time.now.to_s}\n" if warning==""      
    unless _bouin
      warning+="# 注・畳字、両韻文字、または冒韻\n"
    end
    
    ryouin_list=check_ryouin(kansi_organize(str))

    result=str+data+seikei(kekka)+warning+"\n"+seikei(ryouin_list)
    yield result if block_given?
    return result
  rescue
    result=str+"\n\n"+seikei(hyosoku(kansi_organize(str)))+"\n"+seikei(check_ryouin(kansi_organize(str)))
    yield result if block_given?
    return result
  end
end

.kohyo(a, zekku) ⇒ Object

弧平の評価。trueがOKということ。



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/kansi_valid/kohyo.rb', line 6

def kohyo(a,zekku)
  bool=true
  if zekku==5
    xx=3#二弧禁のチェック(4番目の○●)
  elsif zekku==7
    xx=7#四弧禁のチェック(8番目の○●)
  else
    return nil
  end
  
  0.upto(3) do |x|
  #puts Kconv.tosjis a[x][xx]
    case a[x][xx]
    when ""
      next
    when ""
      next
    when ""
     bool=bool &&
     (be_hyo(a[x][xx+2])||
      be_hyo(a[x][xx-2]))
    else
      #"analyze error:elegal char"
      return nil
    end
  end
  return bool
end

.kohyouObject



196
# File 'lib/kansi_valid.rb', line 196

alias kohyou kohyo

.kougo(rule = nil, inn = ) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/kansi_valid/kougo.rb', line 74

def kougo(rule=nil,inn=inji[rand(30)])
inn=inn.split(//)
kekka=""
jouyou_kanji=Jouyou
#p jouyou_kanji.size
jouyou_kanji=jouyou_kanji-inn
#p jouyou_kanji.size
#p inn.size
list=[jouyou_kanji,inn]

#7gon
if rule==nil
x=zekku_list[rand(2)]
rule=x[rand(x.size)]
#香語ルール追加
#人生職業境遇
rule+="

茲惟
新帰元 ◇◇◇◇信仁"
#八字称 人格・徳行
rule+="
◇◇◇◇
◇◇◇◎
"
#隔対 8または10*2句
#直対 8または10*2句
rule+="
◇◇◇◇◇◇ ◇◇◇●
◇◇◇◇◇◇ ◇◇◇◎

◇◇◇◇ ◇◇◇◇◇●
◇◇◇◇ ◇◇◇◇◇◎

既而
◇◇◇◇ ◇◇◇●
◇◇◇◇ ◇◇◇◎

◇◇◇◇◇◇●
◇◇◇◇◇◇◎
"
#つなぎ
rule+="
正与麼時
◇◇◇◇◇◇◎
"
#著語(古語、句集)
rule+="
◇◇◇◇◇◇●
◇◇◇◇◇◇◎
喝"
end
#p rule
#p list
kekka=poetter(rule,list)
kekka+="\n##{inn[0]}"
return kekka
end

.kv_bool(str) ⇒ Object Also known as: valid?, bool

文字列が絶句であれば true を返す

valid?(sample)         # =>true (絶句が正しいならtrue。)
                                     (両韻・畳字などはtrueを返せない)  
kv_bool(sample)        # =>同上、   same above


128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/kansi_valid.rb', line 128

def kv_bool(str)
  bool=true
  begin
    comment=kansi_comment(str)#コメントの切り出し
    kansi=kansi_organize(str)# =>整形(半角英数、半角空白など外す)
    kekka=hyousoku(kansi)

    #日本語かどうかの評価
    _nihongo=nihongo(kekka)
    if _nihongo==true
      return false
    end
    
    zekku=check_zekku(kansi)# =>5,7,nil
    
    ouIn=check_ouin(kekka)# =>東、元など
    okosi=check_okosi(kekka)# =>○●■◇?など

    #漢詩としての評価はじめ
    a=kansi_analyze(kekka)#kekkaの分割
    
    #通韻チェック
    tuuIn=check_tuuin(a,zekku,ouIn)#true or false
    unless tuuIn
      return false
    end
    
    #二四不動(挟み平(転句)はOK)
    #二六対(挟み平(転句)はOK)
    hudo=_24hudou(a,zekku)
    unless hudo
      return false
    end
    
    #下三連禁
    _simo3ren=_3ren(a)
    unless _simo3ren
      return false
    end
    
    #挟み平(転句)はOK
    #二弧平禁(七言は四弧平禁)
    _kohyo=kohyo(a,zekku)
    unless _kohyo
      return false
      #warning+="# 警告・二弧平禁(七言は四弧平禁)\n"
    end
    
    #冒韻禁,韻字の句内での重複
    _bouin=bouin(a,zekku,ouIn)&&tuuIn#韻を踏んで(tuuin==true)更にbouin==true
    unless _bouin
      return false
    end
    yield bool if block_given?
  rescue
    yield nil if block_given?
    return nil
  end
  return bool
end

.last_split(str) ⇒ Object

“妙花薫染宿平原常國春風日日温訓読真看般若頌問尋経内悟空門n”などの7言5言 であれば評価する



40
41
42
43
44
45
46
47
48
49
# File 'lib/kansi_valid/kansi_organize.rb', line 40

def last_split(str)
  list=str.chomp
  if str.size==28
    return list.slice(0,7)+"\n"+list.slice(7,7)+"\n"+list.slice(14,7)+"\n"+list.slice(21,7)
  elsif str.size==20
    return list.slice(0,5)+"\n"+list.slice(5,5)+"\n"+list.slice(10,5)+"\n"+list.slice(15,5)
  else
    return list
  end
end

.nihongo(kekka) ⇒ Object

日本語、国字、かな交じりなどのチェック。trueで日本語あり。



6
7
8
9
10
# File 'lib/kansi_valid/nihongo.rb', line 6

def nihongo(kekka)
#needs hyosoku(str)
  bool=kekka.include?("")||kekka.include?("")
  return bool
end

.pick(array, n = 1) ⇒ Object

choise some random pick up,and left pick(,2) # =>[[“a”,“c”],] pick() # => [[“b”],] ##default=1 x,y=pick() # =>x=,y=

pick([]) # =>[[],[]]

if String,it split(//),and return array

pick(“abc”,2) # =>[[“c”,“a”],]



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/kansi_valid/pick.rb', line 14

def pick(array,n=1)
  array=array.split(//) if array.class==String

  x=[]
  begin
    n.times do
      if array.size !=0
        i=rand(array.size)
        x << array[i]
        array.delete_at(i)
      end
    end
    return x,array
  rescue
    return x,array
  end
end

.poetter(rule, list) ⇒ Object



363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/kansi_valid/kansi_generate.rb', line 363

def poetter(rule,list)
  #rule # =>"◇●○◎"
  #list # =>[list of Han character,in_list]
  poem=""
  rule.split(//).each do |sign|
    if sign!="\n"
      #print Kconv.tosjis sign
      x,list=put_char(sign,list)
      poem+=x[0]
      #print Kconv.tosjis poem
    else
      poem+="\n"
    end
  end
  
  return poem
end

.put_char(sign, list) ⇒ Object



318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
# File 'lib/kansi_valid/kansi_generate.rb', line 318

def put_char(sign,list)
  #sign to_be "○"or"●"or"◇"or"◎"or any
  exit=false
  #p list[0]
  #p sign
  while exit != true
    case sign
    when ""
        x,y=pick(list[0])
        #p x
        if be_hyo(hyousoku(x[0]).split(//)[-1])
          exit=true
        else
          next
        end
      
    when ""
        x,y=pick(list[0])
        #p x
        if be_soku(hyousoku(x[0]).split(//)[-1])
          exit=true
        else
          next
        end
      
    when ""
        x,y=pick(list[0])
        z=hyousoku(x[0]).split(//)[-1]
        if be_soku(z) or be_hyo(z)
          exit=true
        else
          next
        end
    when ""
        x,y=pick(list[1])
        return x,[list[0],y]
    else
        #p "else:"+sign
        x,y=pick(sign)
        return x,list
    end
    return x,[y,list[1]]
  end
end

.ref(str) ⇒ Object

文字データベースのwiktionary

http://en.wiktionary.org/wiki/
で文字を調べるように、urlを作成する(1字のみ)
htmlに貼り付けるリンク向きです。

exsample:

ref(“字”) # =>“<a href="en.wiktionary.org/wiki/%E5%AD%97" target="_blank">字</a>” :to_wiktionary :wiktionary



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/kansi_valid/wiktionary.rb', line 28

def ref(str)
  #str should be 1 char
  
  #result=see_dic(str,8)
  kekka=str#rubi(str,result)
  begin
    x="<a href=\"#{wiktionary(str)}\" target=\"_blank\">#{kekka}</a>"
  rescue
    x="<a href=\"#{wiktionary(str)}\">#{str}</a>"
  end
  return x
end

.rubi(rb, rt) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/kansi_valid/kansi_htm.rb', line 27

def rubi(rb,rt)
  if rt!=nil
    "<ruby><rb>#{rb}</rb><rt class='rt'>#{rt}</rt></ruby>"
  elsif rb==" " || rb==" "
    '&nbsp;'
  else
    rb
  end
end

.run(port = 8880, root = File.dirname(__FILE__)+"/../../www") ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/kansi_valid/run.rb', line 4

def run(port=8880,root=File.dirname(__FILE__)+"/../../www")
  Dir.chdir(File.dirname(__FILE__))
  #File.expand_path(File.dirname(__FILE__) + '/../..')
  #require "../kansi_valid"
  if RUBY_PLATFORM.include?("mswin")
    #p rubybin = `exec ./which.bat ruby`.chomp
    list=ENV["PATH"].split(";")
    ls=list.select{|f| f.include?("ruby") && f.include?("bin")}
    rubybin=ls[0].gsub("\\","/")+"/ruby"
  else#linux
    rubybin = `which ruby`.chomp
  end

  document_root = root
  server = WEBrick::HTTPServer.new({
    :DocumentRoot => document_root,
    :BindAddress => '0.0.0.0',
    :CGIInterpreter => rubybin,
    :Port => port
  })

  cgi_root=document_root + '/**/*.{cgi,rb}'
  cgilist = Dir.glob(cgi_root)
  cgilist.each {|cgi_file|
    server.mount(cgi_file, WEBrick::HTTPServlet::CGIHandler, document_root + cgi_file)
  }

  ['INT', 'TERM'].each {|signal|
    Signal.trap(signal){ server.shutdown }
  }
  puts "See! # => 127.0.0.1:#{port.to_s}"
  server.start
end

.sampleObject



6
7
8
# File 'lib/kansi_valid/sample.rb', line 6

def sample
  "#偶成 朱熹\n少年易老学難成\n一寸光陰不可軽\n未覚池塘春草夢\n階前梧葉已秋声\n"
end

.samples(num = 1) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/kansi_valid/sample.rb', line 10

def samples(num=1)
  str=""
  num.times do
    str+=generate()+"\n\n"      
  end
  return str
end

.search(str) ⇒ Object

辞書にある読みなどから調べる search(“かえで”)#=>“2440”, “”, “0”, “○”, “一東”, “上平”, “”, “フウ”, “”, “かえで”, “4976”, “4186”, “13”, “木風几丿虫”, “0”],

""=>["", "4166", "", "0", "", "", "入声", "", "セキ", "", "かえで", "5C65", "6069", "15", "木戚戈上小", "0"]


8
9
10
11
12
13
14
15
16
17
18
# File 'lib/kansi_valid/search.rb', line 8

def search(str)
  hash={}
  Dic.each do |key,val|
    val.each do |content|
      if content.include?(str)
        hash[key]=val
      end
    end
  end
  return hash
end

.see_dic(ji, int) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/kansi_valid/kansi_htm.rb', line 56

def see_dic(ji,int)
  result=Dic[ji]
  case result
  when nil
    nil
  else
    begin
      plus=result[int]#辞書データ
    rescue
      nil#国字、ひらがななど(辞書に載っていて平仄のないもの)またはエラー
    end
  end
end

.seikei(kekka) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/kansi_valid/seikei.rb', line 6

def seikei(kekka)
  if kekka!=nil
    res=""
    begin
      list=kekka.split("\n")
      list.each{|i|res+="#"+i+"\n"}
      xx=res
    rescue
      xx="#"+kekka.strip+"\n"
    end
    return xx
  end
  return res
end

.special_htm(str, int) {|kekka| ... } ⇒ Object

Yields:

  • (kekka)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/kansi_valid/kansi_htm.rb', line 70

def special_htm(str,int)
  kekka=""
  flag=true #perse flag
  #head
  kekka+=html_head
  ##core
  x=str.split(//) #each characters into Array
  x.each do |ji|
      #if comment
      if ji=="#"
        flag=false
        kekka+="<span class='comment'>#"
      elsif ji=="\n"
        kekka+="</span>" if flag==false
        flag=true
        kekka+="<br/>\n"
      else
        if flag
          result=see_dic(ji,int)
          kekka+=rubi(ji,result)
        else
          kekka+=ji
        end
      end
  end
  kekka+=html_end
  
  yield kekka if block_given?
  return kekka
end

.to_htm(str) {|kekka| ... } ⇒ Object

Yields:

  • (kekka)


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
143
144
145
146
# File 'lib/kansi_valid/kansi_htm.rb', line 118

def to_htm(str)
  kekka=""
  flag=true#perse flag
  #head
  kekka+=html_head
  ##core
#p str.encoding
  x=str.split(//)#each characters into Array
  x.each do |ji|
      #if comment
      if ji=="#"
        flag=false
      elsif ji=="\n"
        flag=true
        kekka+="<br/>"
      else
        if flag
          result=hyosoku_htm(ji)
          kekka+=rubi(ji,result)
        else
          kekka+=ji
        end
      end
  end
  kekka+=html_end
  
  yield kekka if block_given?
  return kekka
end

.to_wiktionary(str) {|kekka| ... } ⇒ Object

文字データベースのwiktionary

http://en.wiktionary.org/wiki/
で文字を調べるように、urlを作成する
こちらは多文字に対応している。

exsample:

to_wiktionary(“漢字”)# =>“<a href="en.wiktionary.org/wiki/%E6%BC%A2" target="_blank">漢</a>

<a href=\"http://en.wiktionary.org/wiki/%E5%AD%97\" target=\"_blank\">字</a>

wiktionary ref

Yields:

  • (kekka)


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/kansi_valid/wiktionary.rb', line 51

def to_wiktionary(str)
  kekka=""
  flag=true #perse flag
  ##core
  x=str.split(//) #each characters into Array
  x.each do |ji|
      #if comment
      if ji=="#"
        flag=false
        kekka+="<span class='comment'>#"
      elsif ji=="\n"
        kekka+="</span>" if flag==false
        flag=true
        kekka+="<br/>\n"
      else
        if flag
          kekka+=ref(ji)
        else
          kekka+=ji
        end
      end
  end
  yield kekka if block_given?
  return kekka
end

.wiktionary(str) ⇒ Object

文字データベースのwiktionary:

http://en.wiktionary.org/wiki/
で文字を調べるように、urlを作成する(1字のみ)

exsample:

wiktionary(“字”) # =>“en.wiktionary.org/wiki/%E5%AD%97

to_wiktionary ref



15
16
17
# File 'lib/kansi_valid/wiktionary.rb', line 15

def wiktionary(str)
  str_uri = URI.escape("http://en.wiktionary.org/wiki/#{str}")
end

.zekku_listObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/kansi_valid/kougo.rb', line 5

def zekku_list
hyo_7=["◇○◇●●○◎
◇●◇○○●◎
◇●◇○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●○○◇●◎
◇●◇○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●◇○○●◎
◇●○○○●●
◇○◇●●○◎",
"◇○◇●●○◎
◇●◇○○●◎
◇●○○●○●
◇○◇●●○◎",
"◇○◇●●○◎
◇●○○◇●◎
◇●○○●○●
◇○◇●●○◎"]

soku_7=[
"◇●○○◇●◎
◇○◇●●○◎
◇○◇●◇○●
◇●○○◇●◎",
"◇●◇○○●◎
◇○◇●●○◎
◇○◇●◇○●
◇●○○◇●◎",
"◇●○○◇●◎
◇○◇●●○◎
◇○◇●◇○●
◇●◇○○●◎",
"◇●◇○○●◎
◇○◇●●○◎
◇○◇●◇○●
◇●◇○○●◎"]

hyo_5=[
"◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
"◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
"◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
"◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
"◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
"◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
"◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
"◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
soku_5=[
"◇●◇○●
○○◇●◎
◇○○●●
○●●○◎",
"◇●◇○●
○○◇●◎
○○●○●
○●●○◎",
"◇●◇○●
◇○○●◎
◇○○●●
○●●○◎",
"◇●◇○●
◇○○●◎
○○●○●
○●●○◎"]
return list=[hyo_7,soku_7,hyo_5,soku_5]
end