1
+ <?php
2
+
3
+ /*
4
+ * Written by sharkpp
5
+ *
6
+ * ・ファイル形式メモ
7
+ *
8
+ * 入力補完機能
9
+ * ・形式
10
+ * -----ここから-----
11
+ * Apple
12
+ * Orange
13
+ * Strawberry
14
+ * -----ここまで-----
15
+ *
16
+ * キーワードヘルプ
17
+ * ・形式
18
+ * 単語[[,単語]...] /// 訳語<改行>
19
+ * ・キーワードは複数指定可能です(同義語)。半角カンマで区切って下さい
20
+ * ・'\n'で訳語に改行を入れられます
21
+ * ・一つの定義(行)は、10キロバイト程度までです
22
+ * ・一桁目が';'ならコメント行とみなします
23
+ *
24
+ * ・使い方
25
+ * 1.公式(http://www.php.net/download-docs.php)より
26
+ * Many HTML files をダウンロードして解凍。
27
+ * 2.$base_url に解凍した場所を指定。
28
+ * 3.phpで実行するだけ。
29
+ *
30
+ */
31
+
32
+ //$base_url = "http://127.0.0.1/html/";
33
+ $ base_url = ". \\html \\" ;
34
+
35
+ // URLの列挙
36
+ function enum_links ($ url , $ prefix )
37
+ {
38
+ $ result = array ();
39
+ $ base_url = dirname ($ url ) . '/ ' ;
40
+ $ prefix_ = '" ' .$ prefix .'", ' .strlen ($ prefix );
41
+
42
+ $ data = file_get_contents ($ url );
43
+ if ( 0 < preg_match_all ('/<a href="([^"]+)">([^<]+)<\/a>/ ' , $ data , $ m ) ) {
44
+ $ result = array_filter ($ m [1 ]
45
+ , create_function ('$v ' , 'return !strncmp($v, ' .$ prefix_ .'); ' ));
46
+ array_walk ($ result
47
+ , create_function ('&$v ' , '$v=" ' .$ base_url .'".$v; ' ));
48
+ }
49
+ return $ result ;
50
+ }
51
+
52
+ function trim_multiline ($ text )
53
+ {
54
+ return trim (preg_replace ("/ +/ " , " " , str_replace ("\r" , "" , str_replace ("\n" , "" , html_entity_decode (strip_tags ($ text ))))));
55
+ }
56
+
57
+ $ kwdhlp = "" ;
58
+ $ kwd = "" ;
59
+ $ kwd2 = "" ;
60
+
61
+ // 公開日・著作権者
62
+ $ data = file_get_contents ($ base_url . "index.html " );
63
+ $ pubdate = 0 < preg_match ('/class="pubdate">(.+?)<\// ' , $ data , $ m )
64
+ ? $ m [1 ]
65
+ : '' ;
66
+ $ copyright = 0 < preg_match ('/<div class="copyright">(.+?)<\/div>/s ' , $ data , $ m )
67
+ ? trim_multiline (str_replace ("© " , "(c) " , $ m [1 ]))
68
+ : '' ;
69
+
70
+ $ kwdhlp = <<<EOD
71
+ ; PHP マニュアル {$ pubdate }版より生成
72
+ ; {$ copyright }
73
+
74
+ EOD ;
75
+
76
+ // 定義済みのキーワード
77
+ $ data = file_get_contents ($ base_url . "reserved.keywords.html " );
78
+ preg_match_all ('/class="(function|link)">(.+?)<\// ' , $ data , $ m );
79
+ array_walk ($ m [2 ]
80
+ , create_function ('&$v ' , '$v=str_replace("(", "", str_replace(")", "", $v)); ' ));
81
+ $ kwd .= implode ("\r\n" , $ m [2 ]) . "\r\n" ;
82
+ // 定義済みの定数
83
+ $ data = file_get_contents ($ base_url . "reserved.constants.html " );
84
+ preg_match_all ('/class="constant">(.+?)<\// ' , $ data , $ m );
85
+ $ kwd2 .= implode ("\r\n" , $ m [1 ]) . "\r\n" ;
86
+
87
+ // キーワードヘルプ・キーワード生成
88
+ $ book_urls = enum_links ($ base_url . "funcref.html " , "book " );
89
+ $ func_urls = array ();
90
+ foreach ($ book_urls as $ url ) {
91
+ $ func_urls = array_merge ($ func_urls , enum_links ($ url , "function " ));
92
+ }
93
+ foreach (array_unique ($ func_urls ) as $ url ) {
94
+ $ data = file_get_contents ($ url );
95
+ $ refname = 0 < preg_match ('/class="refname">(.*?)<\//s ' , $ data , $ m )
96
+ ? trim_multiline (mb_convert_encoding ($ m [1 ], 'SJIS ' , 'UTF-8 ' ))
97
+ : '' ;
98
+ $ syntax = 0 < preg_match ('/<div class="methodsynopsis dc-description">(.*?)<\/div>/s ' , $ data , $ m )
99
+ ? trim_multiline ($ m [1 ])
100
+ : '' ;
101
+ $ desc = 0 < preg_match ('/<title>(.*?)<\/title>/s ' , $ data , $ m )
102
+ ? trim_multiline (mb_convert_encoding ($ m [1 ], 'SJIS ' , 'UTF-8 ' ))
103
+ : '' ;
104
+ // if( empty($refname) || empty($syntax) ) {
105
+ // echo $url . "\n";
106
+ // }
107
+ $ kwdhlp .= $ refname . " /// " . (empty ($ syntax ) ? "" : $ syntax . "\\n " ) . $ desc . "\r\n" ;
108
+ $ kwd .= $ refname . "\r\n" ;
109
+ }
110
+
111
+ //var_dump($func_urls);
112
+
113
+ file_put_contents ("php.khp " , $ kwdhlp );
114
+ file_put_contents ("php.kwd " , $ kwd );
115
+ file_put_contents ("php2.kwd " , $ kwd2 );
116
+
117
+ ?>
0 commit comments