kansi_valid 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,151 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ def html_head(title="kansi_htm")
6
+ head = <<EOS
7
+ <html>
8
+ <head>
9
+ <meta http-equiv="Content-Language" content="ja" />
10
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
11
+ <link rel="stylesheet" type="text/css" href="../css/str.css" title="str"/>
12
+ <title>#{title}</title>
13
+ </head>
14
+ <body>
15
+ <div class="tate"><a name="first"></a>
16
+ EOS
17
+ return head
18
+ end
19
+
20
+ def html_end
21
+ _end='
22
+ <br/><a href="#first">(top)</a></div>
23
+ </body>
24
+ </html>'
25
+ end
26
+
27
+ def rubi(rb,rt)
28
+ if rt!=nil
29
+ "<ruby><rb>#{rb}</rb><rt class='rt'>#{rt}</rt></ruby>"
30
+ elsif rb==" " || rb==" "
31
+ '&nbsp;'
32
+ else
33
+ rb
34
+ end
35
+ end
36
+
37
+ def hyosoku_htm(str)
38
+ moji=str
39
+ #p moji
40
+ result=Dic[moji]#dic_file="kanji_utf8.txt" array or nil
41
+
42
+ case result
43
+ when nil
44
+ nil
45
+ else
46
+ begin
47
+ plus=result[5].split(//).last+result[4]#辞書データ(韻、平仄○●)の出力
48
+ rescue
49
+ nil#国字、ひらがななど(辞書に載っていて平仄のないもの)
50
+ end
51
+ end
52
+ #p result[4]
53
+ #p result[5]
54
+ end
55
+
56
+ def see_dic(ji,int)
57
+ result=Dic[ji]
58
+ case result
59
+ when nil
60
+ nil
61
+ else
62
+ begin
63
+ plus=result[int]#辞書データ
64
+ rescue
65
+ nil#国字、ひらがななど(辞書に載っていて平仄のないもの)またはエラー
66
+ end
67
+ end
68
+ end
69
+
70
+ def special_htm(str,int)
71
+ kekka=""
72
+ flag=true #perse flag
73
+ #head
74
+ kekka+=html_head
75
+ ##core
76
+ x=str.split(//) #each characters into Array
77
+ x.each do |ji|
78
+ #if comment
79
+ if ji=="#"
80
+ flag=false
81
+ kekka+="<span class='comment'>#"
82
+ elsif ji=="\n"
83
+ kekka+="</span>" if flag==false
84
+ flag=true
85
+ kekka+="<br/>\n"
86
+ else
87
+ if flag
88
+ result=see_dic(ji,int)
89
+ kekka+=rubi(ji,result)
90
+ else
91
+ kekka+=ji
92
+ end
93
+ end
94
+ end
95
+ kekka+=html_end
96
+
97
+ yield kekka if block_given?
98
+ return kekka
99
+ end
100
+
101
+ def hyosoku_to_ruby_htm(str)
102
+ kekka=""
103
+ #head
104
+ kekka+=html_head
105
+ ##core
106
+ str.split(//).each do |ji|
107
+ kekka+="<br/>" if ji=="\n"
108
+ result=hyosoku_htm(ji)
109
+ kekka+=rubi(ji,result)
110
+ end
111
+
112
+ #end
113
+ kekka+=html_end
114
+
115
+ yield kekka if block_given?
116
+ return kekka
117
+ end
118
+ def to_htm(str)
119
+ kekka=""
120
+ flag=true#perse flag
121
+ #head
122
+ kekka+=html_head
123
+ ##core
124
+ #p str.encoding
125
+ x=str.split(//)#each characters into Array
126
+ x.each do |ji|
127
+ #if comment
128
+ if ji=="#"
129
+ flag=false
130
+ elsif ji=="\n"
131
+ flag=true
132
+ kekka+="<br/>"
133
+ else
134
+ if flag
135
+ result=hyosoku_htm(ji)
136
+ kekka+=rubi(ji,result)
137
+ else
138
+ kekka+=ji
139
+ end
140
+ end
141
+ end
142
+ kekka+=html_end
143
+
144
+ yield kekka if block_given?
145
+ return kekka
146
+ end
147
+ def kansi_htm(str)
148
+ special_htm(str,8)
149
+ end
150
+ end
151
+
@@ -0,0 +1,57 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ # 漢詩部分の切り出し(#で始まる行は読みとばす)
6
+ # 半角英数の削除
7
+ # 改行のみ,""," "などの行も読みとばす
8
+ # ex. str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
9
+ # =>"妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
10
+ def kansi_organize(str)
11
+ kansi=""
12
+ str2=""
13
+ str.each_line do |line|
14
+ unless line.include?("#")
15
+ str2+=line
16
+ end
17
+ end
18
+ str=str2
19
+ #"妙花薫染宿平原 常國春風日日温 訓読真看般若頌 問尋経内悟空門"半角空白の分割であれば評価可能
20
+ str=str.chomp.gsub(" ","\n")
21
+ str.split(/\n/).each do |x|
22
+ x+="\n"
23
+
24
+ #print x.encode("sjis") #RUBY_VERSION >= "1.9.0"
25
+ if x.split(//).first=='#'
26
+ elsif x=~/^$/
27
+ else
28
+ a=x.gsub(/[0-9A-Za-z]/,"")
29
+ a=a.gsub(/ /,"")
30
+ kansi+=a
31
+ end
32
+ end
33
+ kansi=kansi.gsub("\n\n","\n")
34
+ kansi=last_split(str)
35
+ kansi.chomp # =>"妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
36
+ end
37
+
38
+ #"妙花薫染宿平原常國春風日日温訓読真看般若頌問尋経内悟空門\n"などの7言5言
39
+ #であれば評価する
40
+ def last_split(str)
41
+ list=str.chomp
42
+ if str.size==28
43
+ return list.slice(0,7)+"\n"+list.slice(7,7)+"\n"+list.slice(14,7)+"\n"+list.slice(21,7)
44
+ elsif str.size==20
45
+ return list.slice(0,5)+"\n"+list.slice(5,5)+"\n"+list.slice(10,5)+"\n"+list.slice(15,5)
46
+ else
47
+ return list
48
+ end
49
+ end
50
+ end
51
+
52
+ if $0==__FILE__
53
+ require 'kconv'
54
+ include Kansi_valid
55
+ str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
56
+ print Kconv.tosjis(kansi_organize(str))
57
+ end
@@ -0,0 +1,37 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #弧平の評価。trueがOKということ。
6
+ def kohyo(a,zekku)
7
+ bool=true
8
+ if zekku==5
9
+ xx=3#二弧禁のチェック(4番目の○●)
10
+ elsif zekku==7
11
+ xx=7#四弧禁のチェック(8番目の○●)
12
+ else
13
+ return nil
14
+ end
15
+
16
+ 0.upto(3) do |x|
17
+ #puts Kconv.tosjis a[x][xx]
18
+ case a[x][xx]
19
+ when "◇"
20
+ next
21
+ when "●"
22
+ next
23
+ when "○"
24
+ bool=bool &&
25
+ (be_hyo(a[x][xx+2])||
26
+ be_hyo(a[x][xx-2]))
27
+ else
28
+ #"analyze error:elegal char"
29
+ return nil
30
+ end
31
+ end
32
+ return bool
33
+ end
34
+ end
35
+
36
+ #if $0==__FILE__
37
+ #end
@@ -0,0 +1,132 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ def zekku_list
6
+ hyo_7=["◇○◇●●○◎
7
+ ◇●◇○○●◎
8
+ ◇●◇○○●●
9
+ ◇○◇●●○◎",
10
+ "◇○◇●●○◎
11
+ ◇●○○◇●◎
12
+ ◇●◇○○●●
13
+ ◇○◇●●○◎",
14
+ "◇○◇●●○◎
15
+ ◇●◇○○●◎
16
+ ◇●○○○●●
17
+ ◇○◇●●○◎",
18
+ "◇○◇●●○◎
19
+ ◇●◇○○●◎
20
+ ◇●○○●○●
21
+ ◇○◇●●○◎",
22
+ "◇○◇●●○◎
23
+ ◇●○○◇●◎
24
+ ◇●○○●○●
25
+ ◇○◇●●○◎"]
26
+
27
+ soku_7=[
28
+ "◇●○○◇●◎
29
+ ◇○◇●●○◎
30
+ ◇○◇●◇○●
31
+ ◇●○○◇●◎",
32
+ "◇●◇○○●◎
33
+ ◇○◇●●○◎
34
+ ◇○◇●◇○●
35
+ ◇●○○◇●◎",
36
+ "◇●○○◇●◎
37
+ ◇○◇●●○◎
38
+ ◇○◇●◇○●
39
+ ◇●◇○○●◎",
40
+ "◇●◇○○●◎
41
+ ◇○◇●●○◎
42
+ ◇○◇●◇○●
43
+ ◇●◇○○●◎"]
44
+
45
+ hyo_5=[
46
+ "◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
47
+ "◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
48
+ "◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
49
+ "◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
50
+ "◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
51
+ "◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
52
+ "◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
53
+ "◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
54
+ soku_5=[
55
+ "◇●◇○●
56
+ ○○◇●◎
57
+ ◇○○●●
58
+ ○●●○◎",
59
+ "◇●◇○●
60
+ ○○◇●◎
61
+ ○○●○●
62
+ ○●●○◎",
63
+ "◇●◇○●
64
+ ◇○○●◎
65
+ ◇○○●●
66
+ ○●●○◎",
67
+ "◇●◇○●
68
+ ◇○○●◎
69
+ ○○●○●
70
+ ○●●○◎"]
71
+ return list=[hyo_7,soku_7,hyo_5,soku_5]
72
+ end
73
+
74
+ def kougo(rule=nil,inn=inji[rand(30)])
75
+ inn=inn.split(//)
76
+ kekka=""
77
+ jouyou_kanji=Jouyou
78
+ #p jouyou_kanji.size
79
+ jouyou_kanji=jouyou_kanji-inn
80
+ #p jouyou_kanji.size
81
+ #p inn.size
82
+ list=[jouyou_kanji,inn]
83
+
84
+ #7gon
85
+ if rule==nil
86
+ x=zekku_list[rand(2)]
87
+ rule=x[rand(x.size)]
88
+ #香語ルール追加
89
+ #人生職業境遇
90
+ rule+="
91
+
92
+ 茲惟
93
+ 新帰元 ◇◇◇◇信士"
94
+ #八字称 人格・徳行
95
+ rule+="
96
+ ◇◇◇◇
97
+ ◇◇◇◎
98
+ "
99
+ #隔対 8または10*2句
100
+ #直対 8または10*2句
101
+ rule+="
102
+ ◇◇◇◇◇◇ ◇◇◇●
103
+ ◇◇◇◇◇◇ ◇◇◇◎
104
+
105
+ ◇◇◇◇ ◇◇◇◇◇●
106
+ ◇◇◇◇ ◇◇◇◇◇◎
107
+
108
+ 既而
109
+ ◇◇◇◇ ◇◇◇●
110
+ ◇◇◇◇ ◇◇◇◎
111
+
112
+ ◇◇◇◇◇◇●
113
+ ◇◇◇◇◇◇◎
114
+ "
115
+ #つなぎ
116
+ rule+="
117
+ 正与麼時
118
+ ◇◇◇◇◇◇◎
119
+ "
120
+ #著語(古語、句集)
121
+ rule+="
122
+ ◇◇◇◇◇◇●
123
+ ◇◇◇◇◇◇◎
124
+ 渇"
125
+ end
126
+ #p rule
127
+ #p list
128
+ kekka=poetter(rule,list)
129
+ kekka+="\n##{inn[0]}"
130
+ return kekka
131
+ end
132
+ end
@@ -0,0 +1,12 @@
1
+ # coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #日本語、国字、かな交じりなどのチェック。trueで日本語あり。
6
+ def nihongo(kekka)
7
+ #needs hyosoku(str)
8
+ bool=kekka.include?("■")||kekka.include?("?")
9
+ return bool
10
+ end
11
+ end
12
+
@@ -0,0 +1,57 @@
1
+ #coding:utf-8
2
+
3
+ module Kansi_valid
4
+ module_function
5
+ #choise some random pick up,and left
6
+ # pick(["a","b","c"],2) # =>[["a","c"],["b"]]
7
+ # pick(["a","b","c"]) # => [["b"],["a","c"]] ##default=1
8
+ # x,y=pick(["a","b","c"]) # =>x=["b"],y=["a","c"]
9
+ #
10
+ # pick([]) # =>[[],[]]
11
+ #
12
+ #if String,it split(//),and return array
13
+ # pick("abc",2) # =>[["c","a"],["b"]]
14
+ def pick(array,n=1)
15
+ array=array.split(//) if array.class==String
16
+
17
+ x=[]
18
+ begin
19
+ n.times do
20
+ if array.size !=0
21
+ i=rand(array.size)
22
+ x << array[i]
23
+ array.delete_at(i)
24
+ end
25
+ end
26
+ return x,array
27
+ rescue
28
+ return x,array
29
+ end
30
+ end
31
+ end
32
+
33
+ if $0==__FILE__
34
+ include Kansi_valid
35
+ x,y=pick([])
36
+ p pick([])
37
+ p x
38
+ p y
39
+ x,y=pick(["a","b","c"])
40
+ p x
41
+ p y
42
+ x,y=pick(["a","b","c"],2)
43
+ p x
44
+ p y
45
+ x,y=pick(["a","b","c"],-1)
46
+ p x
47
+ p y
48
+ x,y=pick(["a","b","c"],4)
49
+ p x
50
+ p y
51
+ x,y=pick(["a","b","c"],0)
52
+ p x
53
+ p y
54
+ x,y=pick("abc",2)
55
+ p x
56
+ p y
57
+ end