/[corp_html]/mnogo/ispell.inc
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /mnogo/ispell.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Wed Mar 27 16:00:18 2002 UTC (22 years, 1 month ago) by dpavlin
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
*** empty log message ***

1 dpavlin 1.1 <?
2    
3     class C_AFFIX {
4     var $lang;
5     var $flag;
6     var $sub;
7     var $add;
8     var $regexp;
9     }
10    
11     class C_NORM_FORM {
12     var $word;
13     var $lang;
14     var $flag;
15     }
16    
17     // ---------------------------------------------------
18     // load_affix()
19     // ---------------------------------------------------
20     function load_affix() {
21     global $DEBUG;
22    
23     global $ispellmode;
24    
25     global $affix_file;
26     global $affix_array;
27     global $normalized_array;
28    
29     $affix_array=array();
30     $normalized_array=array();
31    
32     $i=0;
33     if ($ispellmode=='db') {
34     $query="SELECT flag,lang,mask,find,repl
35     FROM affix
36     WHERE type='s'";
37    
38     if($DEBUG) echo "load_affix(): ",$query,"<BR><HR>";
39    
40     if (!($res=db_query($query))) print_error_local('Query error: '.$query."\n<BR>".db_error());
41    
42     while ($row=db_fetchrow($res)) {
43     $affix_array[$i] = new C_AFFIX;
44     $affix_array[$i]->flag=trim($row[0]);
45     $affix_array[$i]->lang=trim($row[1]);
46     $affix_array[$i]->regexp=trim($row[2]);
47     $affix_array[$i]->add=trim($row[3]);
48     $affix_array[$i]->sub=trim($row[4]);
49     $i++;
50     }
51     db_freeresult($res);
52     } elseif ($ispellmode=='text') {
53     reset($affix_file);
54    
55     while (list($lang,$file)=each($affix_file)) {
56     $fd=fopen($file,"r");
57     if (! $fd) {
58     print ("Load affix error: cannot open file $file");
59     exit_local(1);
60     }
61    
62     $suffixes=0;
63     while (! feof($fd)) {
64     $str=strtolower(trim(fgets($fd,1024)));
65    
66     if (preg_match("/^#|^[\s\t\n\r]*$/",$str)) continue;
67    
68     if (ereg("^suffixes",$str)) {
69     $suffixes=1;
70     continue;
71     }
72    
73     if ($suffixes != 1) continue;
74    
75     if (preg_match("/^flag[\s\t]+\*{0,1}(.):/i",$str,$param)) {
76     $flag=trim($param[1]);
77     continue;
78     }
79    
80     if (preg_match("/^[\s\t]*([^>#]+)>[\s\t]+-([^\,\s\t]+),([^\s\t]+)/",$str,$param)) {
81     $regexp=trim($param[1]);
82     $add_str=trim($param[2]);
83     $sub_str=trim($param[3]);
84    
85     if ($sub_str == '-') $sub_str='';
86    
87     $regexp=str_replace(" ","",$regexp);
88     $add_str=str_replace(" ","",$add_str);
89     $sub_str=str_replace(" ","",$sub_str);
90    
91     $affix_array[$i] = new C_AFFIX;
92    
93     $affix_array[$i]->flag=$flag;
94     $affix_array[$i]->lang=$lang;
95     $affix_array[$i]->regexp=$regexp;
96     $affix_array[$i]->add=$add_str;
97     $affix_array[$i]->sub=$sub_str;
98     $i++;
99     } elseif (preg_match("/^[\s\t]*([^>#]+)>[\s\t]+([^\s\t\#]+)/",$str,$param)) {
100     $regexp=trim($param[1]);
101     $add_str='';
102     $sub_str=trim($param[2]);
103    
104     $regexp=str_replace(" ","",$regexp);
105     $sub_str=str_replace(" ","",$sub_str);
106    
107     $affix_array[$i] = new C_AFFIX;
108    
109     $affix_array[$i]->flag=$flag;
110     $affix_array[$i]->lang=$lang;
111     $affix_array[$i]->regexp=$regexp;
112     $affix_array[$i]->add=$add_str;
113     $affix_array[$i]->sub=$sub_str;
114     $i++;
115     }
116     }
117     fclose($fd);
118     }
119     }
120     }
121    
122     // ---------------------------------------------------
123     // normalize_word($word)
124     // ---------------------------------------------------
125     function normalize_word($word) {
126     global $DEBUG;
127    
128     global $affix_array;
129     global $normalized_array;
130    
131     global $final_word;
132    
133     $j=0;
134    
135     for($i=0; $i<count($affix_array); $i++) {
136     $sub=$affix_array[$i]->sub;
137     if (strlen($word)<strlen($sub)) continue;
138    
139     if ($sub != '') {
140     if (strcmp($sub,substr($word,strlen($word)-strlen($sub),strlen($sub)))!=0) continue;
141     $temp_word=eregi_replace("$sub$",$affix_array[$i]->add,$word);
142     } else {
143     $temp_word=$word.$affix_array[$i]->add;
144     }
145    
146     if (eregi($affix_array[$i]->regexp,$temp_word)) {
147     if ($DEBUG) echo "<font color=#a00000>Possible norm form</font> \"$temp_word\" for \"$word\":".
148     " <font color=#a00000>-</font> ".$affix_array[$i]->sub.
149     " <font color=#a00000>+</font> ".$affix_array[$i]->add.
150     " <font color=#a00000>exp</font> ".$affix_array[$i]->regexp.
151     " <font color=#a00000>fl</font> ".$affix_array[$i]->flag.
152     " <font color=#a00000>lng</font> ".$affix_array[$i]->lang.
153     "<br><hr>\n";
154    
155     $normalized_array["$word"][$j]=new C_NORM_FORM;
156     $normalized_array["$word"][$j]->word=$temp_word;
157     $normalized_array["$word"][$j]->flag=$affix_array[$i]->flag;
158     $normalized_array["$word"][$j]->lang=$affix_array[$i]->lang;
159     $j++;
160     }
161     }
162    
163     $final_word["$word"][0]=$word;
164     }
165    
166     // ---------------------------------------------------
167     // check_words()
168     // ---------------------------------------------------
169     function check_words() {
170     global $DEBUG;
171    
172     global $ispellmode;
173     global $spell_file;
174     global $grep;
175    
176     global $final_word;
177     global $normalized_array;
178    
179     reset ($normalized_array);
180     while (list($word,$value)=each($normalized_array)) {
181     for ($j=0; $j<count($value); $j++) {
182     $norm_word=$normalized_array[$word][$j]->word;
183     $norm_lang=$normalized_array[$word][$j]->lang;
184     $norm_flag=$normalized_array[$word][$j]->flag;
185    
186     if ($ispellmode=='db') {
187     $query="SELECT flag
188     FROM spell
189     WHERE word='$norm_word'
190     AND lang='$norm_lang'";
191    
192     if($DEBUG) echo "check_words(): ",$query,"<BR><HR>";
193    
194     if (!($res=db_query($query))) print_error_local('Query error: '.$query."\n<BR>".db_error());
195    
196     while ($row=db_fetchrow($res)) {
197     $flag=trim($row[0]);
198     if ($flag == '') continue;
199     if (ereg($norm_flag,$flag)) {
200     $final_word[$word][]=$norm_word;
201     if ($DEBUG) echo "check_words(): ","<font color=#0000d0>Norm form found:</font> \"$norm_word\" for \"$word\"<br><hr>\n";
202     }
203     }
204     db_freeresult($res);
205     } elseif ($ispellmode=='text') {
206     reset ($spell_file);
207     while (list($lang,$lang_file)=each($spell_file)) {
208     if ($lang != $norm_lang) continue;
209     for ($i=0;$i<count($lang_file);$i++) {
210     $file=$lang_file[$i];
211     $pipe="$grep -i \"^$norm_word/\" $file";
212     if ($DEBUG) echo "check_words(): ",$pipe."<br><hr>";
213    
214     $fd=popen($pipe,"r");
215    
216     if (! $fd) {
217     print "Cannot pipe to $grep<br>\n";
218     exit_local(1);
219     }
220    
221     while (! feof($fd)) {
222     $str=trim(strtolower(fgets($fd,1024)));
223     if ($str=='') continue;
224     $str_array=explode("/",$str);
225    
226     if (($str_array[0]==$norm_word)&&
227     (ereg($norm_flag,$str_array[1]))) {
228     $final_word[$word][]=$norm_word;
229     if ($DEBUG) echo "check_words(): ","<font color=#0000d0>Norm form found:</font> \"$norm_word\" for \"$word\"<br><hr>\n";
230     }
231     } // while
232    
233     pclose($fd);
234     } // for
235     }
236     } // if
237     } // for
238     } // while
239     }
240    
241     ?>
242    

  ViewVC Help
Powered by ViewVC 1.1.26