summaryrefslogtreecommitdiff
path: root/ext/aspell/aspell.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/aspell/aspell.c')
-rw-r--r--ext/aspell/aspell.c218
1 files changed, 218 insertions, 0 deletions
diff --git a/ext/aspell/aspell.c b/ext/aspell/aspell.c
new file mode 100644
index 0000000000..0ed437294c
--- /dev/null
+++ b/ext/aspell/aspell.c
@@ -0,0 +1,218 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP HTML Embedded Scripting Language Version 3.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-1999 PHP Development Team (See Credits file) |
+ +----------------------------------------------------------------------+
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of one of the following licenses: |
+ | |
+ | A) the GNU General Public License as published by the Free Software |
+ | Foundation; either version 2 of the License, or (at your option) |
+ | any later version. |
+ | |
+ | B) the PHP License as published by the PHP Development Team and |
+ | included in the distribution in the file: LICENSE |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU General Public License for more details. |
+ | |
+ | You should have received a copy of both licenses referred to here. |
+ | If you did not, or have any questions about PHP licensing, please |
+ | contact core@php.net. |
+ +----------------------------------------------------------------------+
+ | Authors: |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id$ */
+
+#include "php.h"
+#if defined(COMPILE_DL)
+#include "phpdl.h"
+#endif
+#include <stdlib.h>
+#include <ctype.h>
+#include <stdio.h>
+
+#if HAVE_ASPELL
+
+#include "php3_aspell.h"
+#if APACHE
+# ifndef DEBUG
+# undef palloc
+# endif
+#endif
+#include <aspell-c.h>
+
+function_entry aspell_functions[] = {
+ {"aspell_new", php3_aspell_new, NULL},
+ {"aspell_check", php3_aspell_check, NULL},
+ {"aspell_check_raw", php3_aspell_check_raw, NULL},
+ {"aspell_suggest", php3_aspell_suggest, NULL},
+ {NULL, NULL, NULL}
+};
+
+static int le_aspell;
+
+php3_module_entry aspell_module_entry = {
+ "Aspell", aspell_functions, php3_minit_aspell, NULL, NULL, NULL, php3_info_aspell, STANDARD_MODULE_PROPERTIES
+};
+
+
+#if COMPILE_DL
+DLEXPORT php3_module_entry *get_module(void) { return &aspell_module_entry; }
+#endif
+
+int php3_minit_aspell(INIT_FUNC_ARGS)
+{
+ le_aspell = register_list_destructors(php3_aspell_close,NULL);
+ return SUCCESS;
+
+}
+void php3_aspell_close(aspell *sc)
+{
+ aspell_free(sc);
+}
+
+/* {{{ proto int aspell_new(string master[, string personal])
+ Load a dictionary */
+void php3_aspell_new(INTERNAL_FUNCTION_PARAMETERS)
+{
+ pval *master, *personal;
+ int argc;
+ aspell *sc;
+ int ind;
+ TLS_VARS;
+
+ argc = ARG_COUNT(ht);
+ if (argc < 1 || argc > 2 || getParameters(ht, argc, &master,&personal) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ convert_to_string(master);
+ if(argc==2)
+ {
+ convert_to_string(personal) ;
+ sc=aspell_new(master->value.str.val,personal->value.str.val);
+ }
+ else
+ sc=aspell_new(master->value.str.val,"");
+
+ ind = php3_list_insert(sc, le_aspell);
+ RETURN_LONG(ind);
+}
+/* }}} */
+
+/* {{{ proto array aspell_suggest(aspell int,string word)
+ Return array of Suggestions */
+void php3_aspell_suggest(INTERNAL_FUNCTION_PARAMETERS)
+{
+ pval *scin, *word;
+ int argc;
+ aspell *sc;
+ int ind,type;
+ aspellSuggestions *sug;
+ size_t i;
+
+ TLS_VARS;
+
+ argc = ARG_COUNT(ht);
+ if (argc != 2 || getParameters(ht, argc, &scin,&word) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ convert_to_long(scin);
+ convert_to_string(word);
+ sc= (aspell *) php3_list_find(scin->value.lval, &type);
+ if(!sc)
+ {
+ php3_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
+ RETURN_FALSE;
+ }
+
+ if (array_init(return_value) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ sug = aspell_suggest(sc, word->value.str.val);
+ for (i = 0; i != sug->size; ++i) {
+ add_next_index_string(return_value,(char *)sug->data[i],1);
+ }
+ aspell_free_suggestions(sug);
+}
+/* }}} */
+
+/* {{{ proto int aspell_check(aspell int,string word)
+ Return if word is valid */
+void php3_aspell_check(INTERNAL_FUNCTION_PARAMETERS)
+{
+ int type;
+ pval *scin,*word;
+ aspell *sc;
+ int argc;
+ TLS_VARS;
+ argc = ARG_COUNT(ht);
+ if (argc != 2 || getParameters(ht, argc, &scin,&word) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ convert_to_long(scin);
+ convert_to_string(word);
+ sc= (aspell *) php3_list_find(scin->value.lval, &type);
+ if(!sc)
+ {
+ php3_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
+ RETURN_FALSE;
+ }
+ if (aspell_check(sc, word->value.str.val))
+ {
+ RETURN_TRUE;
+ }
+ else
+ {
+ RETURN_FALSE;
+ }
+}
+/* }}} */
+
+/* {{{ proto int aspell_check_raw(aspell int,string word)
+ Return if word is valid, ignoring case or trying to trim it in any way*/
+void php3_aspell_check_raw(INTERNAL_FUNCTION_PARAMETERS)
+{
+ pval *scin,*word;
+ int type;
+ int argc;
+ aspell *sc;
+ TLS_VARS;
+
+ argc = ARG_COUNT(ht);
+ if (argc != 2 || getParameters(ht, argc, &scin,&word) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ convert_to_long(scin);
+ convert_to_string(word);
+ sc= (aspell *) php3_list_find(scin->value.lval, &type);
+ if(!sc)
+ {
+ php3_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
+ RETURN_FALSE;
+ }
+ if (aspell_check_raw(sc, word->value.str.val))
+ {
+ RETURN_TRUE;
+ }
+ else
+ {
+ RETURN_FALSE;
+ }
+}
+/* }}} */
+
+void php3_info_aspell(void)
+{
+ TLS_VARS;
+ php3_printf("ASpell support enabled");
+
+}
+
+#endif