--- basic_functions.c.orig	Sun May 20 02:31:45 2001
+++ basic_functions.c	Wed Oct  3 15:01:22 2001
@@ -177,6 +177,7 @@
 	PHP_FE(quotemeta,								NULL)
 	PHP_FE(ucfirst,									NULL)
 	PHP_FE(ucwords,									NULL)
+	PHP_FE(smallcaps,								NULL)
 	PHP_FE(strtr,									NULL)
 	PHP_FE(addslashes,								NULL)
 	PHP_FE(addcslashes,								NULL)
--- php_string.h.orig	Sat Mar 17 21:35:38 2001
+++ php_string.h	Wed Oct  3 15:01:46 2001
@@ -51,6 +51,7 @@
 PHP_FUNCTION(quotemeta);
 PHP_FUNCTION(ucfirst);
 PHP_FUNCTION(ucwords);
+PHP_FUNCTION(smallcaps);
 PHP_FUNCTION(strtr);
 PHP_FUNCTION(strrev);
 PHP_FUNCTION(hebrev);
--- string.c.orig	Sun Apr 29 15:30:56 2001
+++ string.c	Sat Oct  6 01:15:57 2001
@@ -1526,6 +1526,97 @@
 }
 /* }}} */
 
+PHPAPI char *php_smallcaps_insert(char *src, char *dst, unsigned int index)
+{
+    unsigned int i, new_len, rpart_len, src_len, dst_len;
+
+    src_len = strlen(src);
+    dst_len = strlen(dst);
+    
+    new_len = dst_len + src_len;
+    dst = erealloc(dst, new_len + 1);
+    dst[new_len] = 0;
+    
+    // copy the right block at the end
+    rpart_len = dst_len - index;
+    for (i=0; i<rpart_len; i++)
+	dst[new_len - i - 1] = dst[index + rpart_len - i - 1];
+
+    // copy the src in place
+    for (i=0; i<src_len; i++)
+	dst[index + i] = src[i];
+
+    return dst;
+}
+
+/* {{{ proto string smallcaps(string str[, string scale])
+   Translate HTML to virtual small caps (dali@dali-designs.com) */
+PHP_FUNCTION(smallcaps)
+{
+        zval **args[2];
+	unsigned int arg_count = ZEND_NUM_ARGS();
+	
+	char *tag11 = "<span style='font-size: ";
+	char *tag12 = "'>";
+	char *tag_2  = "</span>";
+	char *tag_default = "80%";
+	
+	char *tag_1;
+	
+	char *retval;
+	unsigned int i = 0, tag1_len, tag2_len;
+	char flag = 0;
+	
+	if (arg_count < 1 || arg_count > 2)
+	    WRONG_PARAM_COUNT;
+	
+	if (zend_get_parameters_array_ex(arg_count, args) != SUCCESS)
+	    WRONG_PARAM_COUNT;
+	
+	convert_to_string_ex(args[0]);
+	if (!Z_STRLEN_PP(args[0])) {
+		RETURN_EMPTY_STRING();
+	}
+	
+	if (arg_count > 1) {
+	    convert_to_string_ex(args[1]);
+	    tag_default = Z_STRVAL_PP(args[1]);
+	}
+	
+	tag_1 = (char *)emalloc(strlen(tag11) + strlen(tag12) + strlen(tag_default) + 1);
+	strcpy(tag_1, tag11);
+	strcpy(tag_1 + strlen(tag_1), tag_default);
+	strcpy(tag_1 + strlen(tag_1), tag12);
+
+	retval = (char *)estrdup(Z_STRVAL_PP(args[0]));
+	tag1_len = strlen(tag_1);
+	tag2_len = strlen(tag_2);
+	
+	while (retval[i]) {
+	    if (islower(retval[i])) {
+		if (!flag) {
+		    flag = 1;
+		    retval = php_smallcaps_insert(tag_1, retval, i);
+		    i += tag1_len;
+		}
+		retval[i] = toupper(retval[i]);
+	    } else {
+		if (flag) {
+		    flag = 0;
+		    retval = php_smallcaps_insert(tag_2, retval, i);
+		    i += tag2_len;
+		}
+	    }
+	    i++;
+	}
+	
+	if (flag) retval = php_smallcaps_insert(tag_2, retval, i);
+	efree(tag_1);
+	
+	RETVAL_STRINGL(retval, strlen(retval), 0);
+}
+/* }}} */
+
 PHPAPI char *php_strtr(char *str, int len, char *str_from,
 					   char *str_to, int trlen)
 {

