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,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