kansi_valid 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #下三連禁。trueがOKということ
6
+ def _3ren(a)
7
+ bool=false
8
+ 0.upto(3) do |x|
9
+ bool=bool ||
10
+ ((a[x][-1].include?("○")||(a[x][-1].include?("◇")) && x!=2)&&
11
+ a[x][-3].include?("○")&&
12
+ a[x][-5].include?("○"))||
13
+ (a[x][-1].include?("●")&&
14
+ a[x][-3].include?("●")&&
15
+ a[x][-5].include?("●"))
16
+ end
17
+ return !bool
18
+ end
19
+ end
20
+
21
+ #if $0==__FILE__
22
+ #end
@@ -0,0 +1,15 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #○平であることにtrue
6
+ #参照
7
+ #hyosoku,be_soku
8
+ def be_hyo(ji)
9
+ #puts Kconv.tosjis ji
10
+ ji.include?("○") or ji.include?("◇")
11
+ end
12
+ end
13
+
14
+ #if $0==__FILE__
15
+ #end
@@ -0,0 +1,15 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ # ●仄であることにtrue
6
+ #参照
7
+ #hyosoku,be_hyo
8
+ def be_soku(ji)
9
+ #puts Kconv.tosjis ji
10
+ ji.include?("●") or ji.include?("◇")
11
+ end
12
+ end
13
+
14
+ #if $0==__FILE__
15
+ #end
@@ -0,0 +1,38 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #冒韻を調べる。trueがOKということ。
6
+ #bouin(poem_string(詩),zekku=(5or7),ouIn=(ex."東"))
7
+ def bouin(a,zekku,ouIn)
8
+ #(押韻)の数を引き算で調べる
9
+ _in=a.flatten.size-((a.flatten-[ouIn]).size)# =>2,3,4など
10
+ if zekku==5
11
+ if _in==2
12
+ #五言絶句の通常の韻の数==2
13
+ return true
14
+ elsif _in==3
15
+ #五言絶句で、第一句が韻ならOK(==3)
16
+ if a[0][8]==ouIn
17
+ return true
18
+ else
19
+ return false
20
+ end
21
+ else
22
+ #五言のそれ以外は冒韻またはエラー
23
+ return false
24
+ end
25
+ elsif zekku==7
26
+ if _in==3 or (_in==2 && a[0][12]!=ouIn)
27
+ return true
28
+ else
29
+ #それ以外はエラー
30
+ return false
31
+ end
32
+ else
33
+ #絶句にあてはまらないものはnil
34
+ return nil
35
+ end
36
+ nil#どれにもあてはまらない(??)
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #起式のチェック(2番目文字の平仄記号を返す)
6
+ def check_okosi(kekka)
7
+
8
+ kekka.encode("utf-8") unless RUBY_VERSION < "1.9.0"
9
+
10
+ x=kekka.split(//)
11
+ return x[3]# =>○●、■◇?など
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #漢詩4句の最後の語句ex."青○隊●遇●東◇元○"の最後の'元'を取り出す。
6
+ def check_ouin(kekka)
7
+
8
+ array=kekka.split(/\n/)# =>四句のリスト
9
+
10
+ if RUBY_VERSION < "1.9.0"
11
+ return array[3].chomp.split(//)[-2]# =>'元'
12
+ else
13
+ x=array[3].split(//)
14
+ return x[((x.size)/2-1)*2]# =>'元'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ def check_ryouin_table(kansi)
6
+ #ex.
7
+ #kansi="妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
8
+ kekka=""
9
+ kansi.split(//).each do |ji|
10
+ begin
11
+ a=Dic[ji]
12
+ if a[4]#=="◇"
13
+ 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"
14
+ end
15
+ rescue
16
+ kekka+="\n"
17
+ next
18
+ end
19
+ end
20
+ return kekka
21
+ end
22
+ def check_ryouin(kansi)
23
+ #ex.
24
+ #kansi="妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
25
+ kekka=""
26
+ kansi.split(//).each do |ji|
27
+ begin
28
+ a=Dic[ji]
29
+ if a[4]#=="◇"
30
+ kekka+=ji+":"+a[4]+":"+a[5]+":"+a[7]+":"+a[8]+":"+a[10]+"\n"
31
+ end
32
+ rescue
33
+ kekka+="\n"
34
+ next
35
+ end
36
+ end
37
+ return kekka
38
+ end
39
+ end
40
+
41
+
42
+ if $0==__FILE__
43
+ require 'kansi_valid'
44
+ require 'kconv'
45
+ include Kansi_valid
46
+ print Kconv.tosjis check_ryouin("妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門")
47
+ end
@@ -0,0 +1,30 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #通韻のチェック
6
+ def check_tuuin(a,zekku,ouIn)
7
+ #print a
8
+ #print zekku
9
+ #print ouIn
10
+ if zekku!=nil
11
+ #七言絶句
12
+ if zekku==7
13
+ #p ouIn
14
+ #p a[0][12]
15
+ return (ouIn==a[0][12] && ouIn==a[1][12] && ouIn==a[3][12])
16
+ #五言絶句
17
+ elsif zekku==5
18
+ #p ouIn
19
+ #p a[1][8]
20
+ return (ouIn==a[1][8] && ouIn==a[3][8] && (ouIn==a[0][8]) or be_soku(a[0][9]))
21
+ #その他(false)
22
+ else
23
+ return false
24
+ end
25
+ else
26
+ return false
27
+ end
28
+ false
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #五言なら5、七言なら7、それ以外nil
6
+ def check_zekku(kekka)
7
+
8
+ if RUBY_VERSION < "1.9.0"
9
+ check=kekka.split(/\n/)[0].size/3
10
+ else
11
+ check=kekka.split(/\n/)[0].size
12
+ end
13
+
14
+ if check==7
15
+ zekku=7
16
+ elsif check==5
17
+ zekku=5
18
+ else
19
+ zekku=nil
20
+ end
21
+ zekku
22
+ end
23
+ end
@@ -0,0 +1,46 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ # str = "a妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
6
+ # hyousoku(str)# => "?a嘯●麻○文○炎●屋●庚○元○
7
+ # 陽○職●真○東◇質●質●元○
8
+ # 問●屋●真○寒◇寒○薬●宋●
9
+ # 問●侵○青○隊●遇●東◇元○"
10
+ def hyousoku(str)
11
+ kekka=""
12
+
13
+ str.encode("utf-8") unless RUBY_VERSION < "1.9.0"
14
+
15
+ str.split(//).each do |moji|
16
+ #p moji
17
+ result=Dic[moji]#dic_file="kanji_utf8.txt" array or nil
18
+ case result
19
+ when nil
20
+ if moji=~/\s/
21
+ plus=moji#改行などはそのまま返す
22
+ else
23
+ plus="?"+moji#空白以外で変換できなかったnil
24
+ end
25
+ else
26
+ begin
27
+ plus=result[5].split(//).last+result[4]#辞書データ(韻、平仄○●)の出力
28
+ rescue
29
+ plus="?"+moji#国字、ひらがななど(辞書に載っていて平仄のないもの)
30
+ end
31
+ end
32
+ kekka+=plus
33
+ #p result[4]
34
+ #p result[5]
35
+ end
36
+ kekka
37
+ end
38
+ end
39
+
40
+ #if $0==__FILE__
41
+ #require "kansi_valid"
42
+ #require "kconv"
43
+ #include Kansi_valid
44
+ #print Kconv.tosjis(hyousoku(str="a妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"))
45
+
46
+ #end
@@ -0,0 +1,65 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ # 平韻の30種の配列
6
+ def inji
7
+ str=["東翁窮宮弓攻洪功公工紅鴻終充戎崇聡叢衷沖忠虫通筒桐瞳銅同童風楓豊蓬蒙朦濛雄熊融隆朧瓏空虹中凍夢滝籠",
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
+ end
39
+ end
40
+
41
+ if $0==__FILE__
42
+ include Kansi_valid
43
+ require 'kconv'
44
+ num=0
45
+ xx=0
46
+ str=inji
47
+ open("inji.txt","w") do |io|
48
+ str.each do |moji|
49
+ x=moji.split(//).size
50
+ num+=x
51
+ #p x
52
+ xx+=1
53
+ if xx < 16
54
+ yy=xx
55
+ else
56
+ yy=xx-15
57
+ end
58
+ y=yy.to_s+moji.split(//).first
59
+ io.puts y
60
+ io.puts moji
61
+ io.puts hyosoku(moji)
62
+ end
63
+ end
64
+ p num
65
+ end
@@ -0,0 +1,18 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ def kanji(dic_file=File.dirname(__FILE__)+"/../../dic/dic.txt")
6
+ #辞書ハッシュの初期化
7
+ dic={}
8
+ #辞書の読みこみ
9
+ data=File.read(dic_file)
10
+ #辞書ハッシュの登録
11
+ data.each_line do |list|
12
+ data=list.chomp.split(/;/)
13
+ dic[data[0]]=data
14
+ end
15
+ return dic
16
+ end
17
+ module_function:kanji
18
+ end
@@ -0,0 +1,16 @@
1
+ # codong:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+
6
+ def kansi_analyze(kekka)
7
+ a=[]
8
+ x=kekka.split(/\n/)
9
+ x.each do |str|
10
+ b=str.chomp.split(//)
11
+ #p b.size #14 or 10
12
+ a << b
13
+ end
14
+ return a
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ # コメント分の切り出し(#で始まる行)
6
+ # ex. str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
7
+ # =>"#komento\n"
8
+ def kansi_comment(str)
9
+ kekka=""
10
+ str.split(/\n/).each do |x|
11
+ #p x
12
+ #kekka+= x
13
+ if x.split(//).first=='#'
14
+ kekka+=x
15
+ else
16
+ end
17
+ end
18
+ kekka # =>"#komento\n"
19
+ end
20
+ end
21
+
22
+ #if $0==__FILE__
23
+ #end
@@ -0,0 +1,387 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ =begin
6
+ kansi_generate(zekku=7,keyword=["康","鳳祥"],ouin=nil)# =>"漢詩"
7
+ 漢詩の遊び生成プログラム
8
+ *キーワードを指定すると、それをいれてくれる
9
+ *あとはランダムに生成(意味は無視)
10
+ *作ったものをいじって漢詩も再生成可能
11
+
12
+ ===まずは簡易版
13
+ *準備
14
+ **韻をリストアップしておく
15
+ **常用漢字を調べるjouyou_kanji.txt
16
+ **韻字をランダムに選択する(韻3個または2個)
17
+ **平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)
18
+ **先のキーワードを入れる
19
+ **残りの字をランダムに抜き取る
20
+ **これで準備完了
21
+ *リストからランダムに選び出す
22
+ **選んだ字を当てはめる
23
+ **残りをランダムに作成する。
24
+ =end
25
+
26
+
27
+ def kansi_generate(zekku=7,keyword=[],ouin_=nil)
28
+ #p zekku
29
+ #p keyword
30
+ #p ouin_
31
+
32
+ #**韻をリストアップしておく
33
+ #puts list.size#30
34
+
35
+ #**常用漢字を調べる
36
+ jouyou_kanji=Jouyou
37
+ #puts randsize=jouyou_kanji.size#1945
38
+ #puts jouyou_kanji[rand(randsize)]
39
+
40
+ #**韻字をランダムに選択する
41
+ #**決まっているときはそれを選択
42
+ ouin=""
43
+ begin
44
+ if ouin_!=nil
45
+ #inji==韻リスト(30平韻の配列)
46
+ inji.each do |ji|
47
+ #p ji
48
+ if ji.include?(ouin_)
49
+ ouin =ji.split(//)
50
+ break
51
+ end
52
+ end
53
+ else
54
+ ouin=inji[rand(30)].split(//)
55
+ end
56
+ # rescue
57
+ # ouin_=nil
58
+ # retry
59
+ end
60
+
61
+
62
+ jouyou_kanji=jouyou_kanji-ouin #韻を候補から削除
63
+ inn=pick(ouin,3)[0]
64
+
65
+ #**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)
66
+
67
+ #x,y=put_char("○",[jouyou_kanji,inn])
68
+
69
+ list=[jouyou_kanji,inn]
70
+
71
+ #main program
72
+ hyo_7=["◇○◇●●○◎
73
+ ◇●◇○○●◎
74
+ ◇●◇○○●●
75
+ ◇○◇●●○◎",
76
+ "◇○◇●●○◎
77
+ ◇●○○◇●◎
78
+ ◇●◇○○●●
79
+ ◇○◇●●○◎",
80
+ "◇○◇●●○◎
81
+ ◇●◇○○●◎
82
+ ◇●○○○●●
83
+ ◇○◇●●○◎",
84
+ "◇○◇●●○◎
85
+ ◇●◇○○●◎
86
+ ◇●○○●○●
87
+ ◇○◇●●○◎",
88
+ "◇○◇●●○◎
89
+ ◇●○○◇●◎
90
+ ◇●○○●○●
91
+ ◇○◇●●○◎"]
92
+
93
+ soku_7=[
94
+ "◇●○○◇●◎
95
+ ◇○◇●●○◎
96
+ ◇○◇●◇○●
97
+ ◇●○○◇●◎",
98
+ "◇●◇○○●◎
99
+ ◇○◇●●○◎
100
+ ◇○◇●◇○●
101
+ ◇●○○◇●◎",
102
+ "◇●○○◇●◎
103
+ ◇○◇●●○◎
104
+ ◇○◇●◇○●
105
+ ◇●◇○○●◎",
106
+ "◇●◇○○●◎
107
+ ◇○◇●●○◎
108
+ ◇○◇●◇○●
109
+ ◇●◇○○●◎"]
110
+
111
+ hyo_5=[
112
+ "◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
113
+ "◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
114
+ "◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
115
+ "◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
116
+ "◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
117
+ "◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
118
+ "◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
119
+ "◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
120
+ soku_5=[
121
+ "◇●◇○●
122
+ ○○◇●◎
123
+ ◇○○●●
124
+ ○●●○◎",
125
+ "◇●◇○●
126
+ ○○◇●◎
127
+ ○○●○●
128
+ ○●●○◎",
129
+ "◇●◇○●
130
+ ◇○○●◎
131
+ ◇○○●●
132
+ ○●●○◎",
133
+ "◇●◇○●
134
+ ◇○○●◎
135
+ ○○●○●
136
+ ○●●○◎"]
137
+
138
+ if zekku==7 #七言絶句生成
139
+ if rand(2)==0#平仄の振り分け
140
+ #七言○
141
+ x,y=pick(hyo_7)#規則の選択(yはダミー)
142
+ #print Kconv.tosjis x[0]
143
+ poem=poetter(x[0],list)#list は[漢字配列,韻配列]であること。
144
+ else
145
+ #七言●
146
+ #7●
147
+ x,y=pick(soku_7)
148
+ #print Kconv.tosjis x[0]
149
+ poem=poetter(x[0],list)
150
+ end
151
+ elsif zekku==5 #五言絶句生成
152
+ if rand(2)==0
153
+ #五言○
154
+ x,y=pick(hyo_5)
155
+ poem=poetter(x[0],list)
156
+ else
157
+ #五言●
158
+ x,y=pick(soku_5)
159
+ poem=poetter(x[0],list)
160
+ end
161
+ end
162
+ return poem
163
+ #**先のキーワードを入れる
164
+ #**残りの字をランダムに抜き取る
165
+ #**これで準備完了
166
+ #*リストからランダムに選び出す
167
+ #**選んだ字を当てはめる
168
+ #**残りをランダムに作成する。
169
+
170
+ end
171
+
172
+ def kansi_generate2(zekku=7,keyword=[],ouin_=nil)
173
+ #p zekku
174
+ #p keyword
175
+ #p ouin_
176
+
177
+ #**韻をリストアップしておく
178
+ #puts list.size#30
179
+
180
+ #**常用漢字を調べる
181
+ jouyou_kanji=Jouyou
182
+ #puts randsize=jouyou_kanji.size#1945
183
+ #puts jouyou_kanji[rand(randsize)]
184
+
185
+ #**韻字をランダムに選択する
186
+ #**決まっているときはそれを選択
187
+ ouin=""
188
+ begin
189
+ if ouin_!=nil
190
+ #inji==韻リスト(30平韻の配列)
191
+ inji.each do |ji|
192
+ #p ji
193
+ if ji.include?(ouin_)
194
+ ouin =ji.split(//)
195
+ break
196
+ end
197
+ end
198
+ else
199
+ ouin=inji[rand(30)].split(//)
200
+ end
201
+ # rescue
202
+ # ouin_=nil
203
+ # retry
204
+ end
205
+
206
+
207
+ jouyou_kanji=jouyou_kanji-ouin #韻を候補から削除
208
+ inn=pick(ouin,3)[0]
209
+
210
+ #**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)
211
+
212
+ #x,y=put_char("○",[jouyou_kanji,inn])
213
+
214
+ list=[jouyou_kanji,inn]
215
+
216
+ #main program
217
+ hyo_7=["◇○◇●●○◎
218
+ ◇●◇○○●◎
219
+ ◇●◇○○●●
220
+ ◇○◇●●○◎",
221
+ "◇○◇●●○◎
222
+ ◇●○○◇●◎
223
+ ◇●◇○○●●
224
+ ◇○◇●●○◎",
225
+ "◇○◇●●○◎
226
+ ◇●◇○○●◎
227
+ ◇●○○○●●
228
+ ◇○◇●●○◎",
229
+ "◇○◇●●○◎
230
+ ◇●◇○○●◎
231
+ ◇●○○●○●
232
+ ◇○◇●●○◎",
233
+ "◇○◇●●○◎
234
+ ◇●○○◇●◎
235
+ ◇●○○●○●
236
+ ◇○◇●●○◎"]
237
+
238
+ soku_7=[
239
+ "◇●○○◇●◎
240
+ ◇○◇●●○◎
241
+ ◇○◇●◇○●
242
+ ◇●○○◇●◎",
243
+ "◇●◇○○●◎
244
+ ◇○◇●●○◎
245
+ ◇○◇●◇○●
246
+ ◇●○○◇●◎",
247
+ "◇●○○◇●◎
248
+ ◇○◇●●○◎
249
+ ◇○◇●◇○●
250
+ ◇●◇○○●◎",
251
+ "◇●◇○○●◎
252
+ ◇○◇●●○◎
253
+ ◇○◇●◇○●
254
+ ◇●◇○○●◎"]
255
+
256
+ hyo_5=[
257
+ "◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
258
+ "◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
259
+ "◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
260
+ "◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
261
+ "◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
262
+ "◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
263
+ "◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
264
+ "◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
265
+ soku_5=[
266
+ "◇●◇○●
267
+ ○○◇●◎
268
+ ◇○○●●
269
+ ○●●○◎",
270
+ "◇●◇○●
271
+ ○○◇●◎
272
+ ○○●○●
273
+ ○●●○◎",
274
+ "◇●◇○●
275
+ ◇○○●◎
276
+ ◇○○●●
277
+ ○●●○◎",
278
+ "◇●◇○●
279
+ ◇○○●◎
280
+ ○○●○●
281
+ ○●●○◎"]
282
+
283
+ if zekku==7 #七言絶句生成
284
+ if rand(2)==0#平仄の振り分け
285
+ #七言○
286
+ x,y=pick(hyo_7)#規則の選択(yはダミー)
287
+ #print Kconv.tosjis x[0]
288
+ poem=poetter(x[0],list)#list は[漢字配列,韻配列]であること。
289
+ else
290
+ #七言●
291
+ #7●
292
+ x,y=pick(soku_7)
293
+ #print Kconv.tosjis x[0]
294
+ poem=poetter(x[0],list)
295
+ end
296
+ elsif zekku==5 #五言絶句生成
297
+ if rand(2)==0
298
+ #五言○
299
+ x,y=pick(hyo_5)
300
+ poem=poetter(x[0],list)
301
+ else
302
+ #五言●
303
+ x,y=pick(soku_5)
304
+ poem=poetter(x[0],list)
305
+ end
306
+ end
307
+
308
+ return poem
309
+ #**先のキーワードを入れる
310
+ #**残りの字をランダムに抜き取る
311
+ #**これで準備完了
312
+ #*リストからランダムに選び出す
313
+ #**選んだ字を当てはめる
314
+ #**残りをランダムに作成する。
315
+
316
+ end
317
+
318
+ def put_char(sign,list)
319
+ #sign to_be "○"or"●"or"◇"or"◎"or any
320
+ exit=false
321
+ #p list[0]
322
+ #p sign
323
+ while exit != true
324
+ case sign
325
+ when "○"
326
+ x,y=pick(list[0])
327
+ #p x
328
+ if be_hyo(hyousoku(x[0]).split(//)[-1])
329
+ exit=true
330
+ else
331
+ next
332
+ end
333
+
334
+ when "●"
335
+ x,y=pick(list[0])
336
+ #p x
337
+ if be_soku(hyousoku(x[0]).split(//)[-1])
338
+ exit=true
339
+ else
340
+ next
341
+ end
342
+
343
+ when "◇"
344
+ x,y=pick(list[0])
345
+ z=hyousoku(x[0]).split(//)[-1]
346
+ if be_soku(z) or be_hyo(z)
347
+ exit=true
348
+ else
349
+ next
350
+ end
351
+ when "◎"
352
+ x,y=pick(list[1])
353
+ return x,[list[0],y]
354
+ else
355
+ #p "else:"+sign
356
+ x,y=pick(sign)
357
+ return x,list
358
+ end
359
+ return x,[y,list[1]]
360
+ end
361
+ end
362
+
363
+ def poetter(rule,list)
364
+ #rule # =>"◇●○◎"
365
+ #list # =>[list of Han character,in_list]
366
+ poem=""
367
+ rule.split(//).each do |sign|
368
+ if sign!="\n"
369
+ #print Kconv.tosjis sign
370
+ x,list=put_char(sign,list)
371
+ poem+=x[0]
372
+ #print Kconv.tosjis poem
373
+ else
374
+ poem+="\n"
375
+ end
376
+ end
377
+
378
+ return poem
379
+ end
380
+ end
381
+
382
+ if $0==__FILE__
383
+ require '../kansi_valid'
384
+ include Kansi_valid
385
+ print kansi_generate2([])#['康','鳳祥'])
386
+ print kansi_generate2
387
+ end