cvs: php4 /ext/pspell .cvsignore Makefile.in README config.m4 php_pspell.h pspell.c
| From: | Vlad Krupin | Date: | Mon, 10 Jul 2000 21:29:19 +0000 |
| Subject: | cvs: php4 /ext/pspell .cvsignore Makefile.in README config.m4 php_pspell.h pspell.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-712@lists.php.net to get a copy of this message | ||
vlad Mon Jul 10 14:29:19 2000 EDT
Added files:
/php4/ext/pspell .cvsignore Makefile.in README config.m4
php_pspell.h pspell.c
Log:
Initial release. Includes:
- Functionality of aspell
- 3 modes of spellchecking (fast, normal, bad_spellers)
- support for run-together words
Index: php4/ext/pspell/.cvsignore
+++ php4/ext/pspell/.cvsignore
Makefile
*.lo
*.la
libs
Makefile.am
deps
libs.mk
Index: php4/ext/pspell/Makefile.in
+++ php4/ext/pspell/Makefile.in
LTLIBRARY_NAME = libpspell.la
LTLIBRARY_SOURCES = pspell.c
include $(top_srcdir)/build/dynlib.mk
Index: php4/ext/pspell/config.m4
+++ php4/ext/pspell/config.m4
dnl $Id: config.m4,v 1.1 2000/07/10 21:29:19 vlad Exp $
AC_MSG_CHECKING(for PSPELL support)
AC_ARG_WITH(pspell,
[ --with-pspell[=DIR] Include PSPELL support.],
[
if test "$withval" != "no"; then
if test "$withval" = "yes"; then
PSPELL_DIR=/usr/local
else
PSPELL_DIR=$withval
fi
AC_ADD_INCLUDE($PSPELL_DIR/include)
AC_ADD_LIBRARY_WITH_PATH(pspell, $PSPELL_DIR/lib)
if test ! -f "$PSPELL_DIR/include/pspell/pspell.h"; then
AC_MSG_ERROR(Could not find pspell.h in $PSPELL_DIR/include/pspell - please copy it manually
from the pspell sources to $PSPELL_DIR/include/pspell)
fi
AC_DEFINE(HAVE_PSPELL,1,[Whether you have pspell])
AC_MSG_RESULT(yes)
PHP_EXTENSION(pspell)
else
AC_MSG_ERROR(no)
fi
],[
AC_MSG_RESULT(no)
])
Index: php4/ext/pspell/php_pspell.h
+++ php4/ext/pspell/php_pspell.h
/*
+----------------------------------------------------------------------+
| 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
+----------------------------------------------------------------------+
*/
/* $Id: php_pspell.h,v 1.1 2000/07/10 21:29:19 vlad Exp $ */
#ifndef _PSPELL_H
#define _PSPELL_H
#if HAVE_PSPELL
extern zend_module_entry pspell_module_entry;
#define pspell_module_ptr &pspell_module_entry
extern PHP_MINIT_FUNCTION(pspell);
extern PHP_MINFO_FUNCTION(pspell);
PHP_FUNCTION(pspell_new);
PHP_FUNCTION(pspell_mode);
PHP_FUNCTION(pspell_runtogether);
PHP_FUNCTION(pspell_check);
PHP_FUNCTION(pspell_suggest);
#else
#define pspell_module_ptr NULL
#endif
#define phpext_pspell_ptr pspell_module_ptr
#endif /* _PSPELL_H */
Index: php4/ext/pspell/pspell.c
+++ php4/ext/pspell/pspell.c
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt.
|
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Vlad Krupin <phpdevel@echospace.com> |
+----------------------------------------------------------------------+
*/
/* $Id: pspell.c,v 1.1 2000/07/10 21:29:19 vlad Exp $ */
#include "php.h"
#ifdef COMPILE_DL_PSPELL
#include "phpdl.h"
#endif
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#if HAVE_PSPELL
#include "php_pspell.h"
#include <pspell/pspell.h>
#include "ext/standard/info.h"
#define PS_FAST 1
#define PS_NORMAL 2
#define PS_BAD_SPELLERS 3
function_entry pspell_functions[] = {
PHP_FE(pspell_new, NULL)
PHP_FE(pspell_mode, NULL)
PHP_FE(pspell_runtogether, NULL)
PHP_FE(pspell_check, NULL)
PHP_FE(pspell_suggest, NULL)
};
static int le_pspell;
zend_module_entry pspell_module_entry = {
"pspell", pspell_functions, PHP_MINIT(pspell), NULL, NULL, NULL, PHP_MINFO(pspell),
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_PSPELL
ZEND_GET_MODULE(pspell)
#endif
static void php_pspell_close(PspellManager *manager){
delete_pspell_manager(manager);
}
PHP_MINIT_FUNCTION(pspell){
REGISTER_MAIN_LONG_CONSTANT("PS_FAST", PS_FAST, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("PS_NORMAL", PS_NORMAL, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("PS_BAD_SPELLERS", PS_BAD_SPELLERS, CONST_PERSISTENT |
CONST_CS);
le_pspell = register_list_destructors(php_pspell_close,NULL);
return SUCCESS;
}
/* {{{ proto int pspell_new(string language [, string spelling [, string jargon [, string
encoding]]])
Load a dictionary */
PHP_FUNCTION(pspell_new){
pval **language,**spelling,**jargon,**encoding;
int argc;
int ind;
PspellCanHaveError *ret;
PspellManager *manager;
PspellConfig *config;
argc = ZEND_NUM_ARGS();
if (argc < 1 || argc > 4 ||
zend_get_parameters_ex(argc,&language,&spelling,&jargon,&encoding) == FAILURE) {
WRONG_PARAM_COUNT;
}
config = new_pspell_config();
convert_to_string_ex(language);
if(argc > 1){
convert_to_string_ex(spelling) ;
pspell_config_replace(config, "spelling", (*spelling)->value.str.val);
}
if(argc > 2){
convert_to_string_ex(jargon) ;
pspell_config_replace(config, "jargon", (*jargon)->value.str.val);
}
if(argc > 3){
convert_to_string_ex(encoding) ;
pspell_config_replace(config, "encoding", (*encoding)->value.str.val);
}
ret = new_pspell_manager(config);
delete_pspell_config(config);
if(pspell_error_number(ret) != 0){
php_error(E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ",
pspell_error_message(ret));
RETURN_FALSE;
}
manager = to_pspell_manager(ret);
config = pspell_manager_config(manager);
ind = zend_list_insert(manager, le_pspell);
RETURN_LONG(ind);
}
/* }}} */
/* {{{ proto int pspell_mode(string mode)
Change the mode between 'fast', 'normal' and 'bad-spellers' */
PHP_FUNCTION(pspell_mode)
{
int type;
pval **scin, **pmode;
int argc;
long mode = 0L;
PspellManager *manager;
PspellConfig *config;
argc = ZEND_NUM_ARGS();
if (argc != 2 || zend_get_parameters_ex(argc, &scin, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(scin);
convert_to_long_ex(pmode);
mode = Z_LVAL_PP(pmode);
manager = (PspellManager *) zend_list_find((*scin)->value.lval, &type);
if(!manager){
php_error(E_WARNING, "%d is not an PSPELL result index",(*scin)->value.lval);
RETURN_FALSE;
}
config = pspell_manager_config(manager);
if(mode == PS_FAST){
pspell_config_replace(config, "sug-mode", "fast");
}else if(mode == PS_NORMAL){
pspell_config_replace(config, "sug-mode", "normal");
}else if(mode == PS_BAD_SPELLERS){
pspell_config_replace(config, "sug-mode", "bad-spellers");
}else{
RETURN_FALSE;
}
RETURN_TRUE;
}
/* }}} */
/* {{{ proto int pspell_runtogether(string mode)
Change the mode between whether we want to treat run-together words as valid */
PHP_FUNCTION(pspell_runtogether)
{
int type;
pval **scin, **pruntogether;
int argc;
int runtogether;
PspellManager *manager;
PspellConfig *config;
argc = ZEND_NUM_ARGS();
if (argc != 2 || zend_get_parameters_ex(argc, &scin, &pruntogether) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(scin);
convert_to_boolean_ex(pruntogether);
runtogether = (*pruntogether)->value.lval;
manager = (PspellManager *) zend_list_find((*scin)->value.lval, &type);
if(!manager){
php_error(E_WARNING, "%d is not an PSPELL result index",(*scin)->value.lval);
RETURN_FALSE;
}
config = pspell_manager_config(manager);
if(runtogether){
pspell_config_replace(config, "run-together", "true");
}else{
pspell_config_replace(config, "run-together", "false");
}
RETURN_TRUE;
}
/* }}} */
/* {{{ proto int pspell_check(aspell int, string word)
Return if word is valid */
PHP_FUNCTION(pspell_check){
int type;
pval **scin,**word;
PspellManager *manager;
int argc;
argc = ZEND_NUM_ARGS();
if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(scin);
convert_to_string_ex(word);
manager = (PspellManager *) zend_list_find((*scin)->value.lval, &type);
if(!manager){
php_error(E_WARNING, "%d is not an PSPELL result index",(*scin)->value.lval);
RETURN_FALSE;
}
if(pspell_manager_check(manager, (*word)->value.str.val)){
RETURN_TRUE;
}else{
RETURN_FALSE;
}
}
/* }}} */
/* {{{ proto array pspell_suggest(aspell int, string word)
Return array of Suggestions */
PHP_FUNCTION(pspell_suggest)
{
pval **scin, **word;
int argc;
PspellManager *manager;
int type;
const PspellWordList *wl;
const char *sug;
argc = ZEND_NUM_ARGS();
if(argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(scin);
convert_to_string_ex(word);
manager = (PspellManager *) zend_list_find((*scin)->value.lval, &type);
if(!manager){
php_error(E_WARNING, "%d is not an PSPELL result index",(*scin)->value.lval);
RETURN_FALSE;
}
if (array_init(return_value) == FAILURE){
RETURN_FALSE;
}
wl = pspell_manager_suggest(manager, (*word)->value.str.val);
if(wl){
PspellStringEmulation *els = pspell_word_list_elements(wl);
while((sug = pspell_string_emulation_next(els)) != 0){
add_next_index_string(return_value,(char *)sug,1);
}
delete_pspell_string_emulation(els);
}else{
php_error(E_WARNING, "PSPELL had a problem. details: %s ",
pspell_manager_error_message(manager));
RETURN_FALSE;
}
}
/* }}} */
PHP_MINFO_FUNCTION(pspell)
{
php_info_print_table_start();
php_info_print_table_row(2, "PSpell Support", "enabled");
php_info_print_table_end();
}
#endif