[svn-commits] eliel: branch group/appdocsxml r139743 - /team/group/appdocsxml/main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Aug 25 07:26:14 CDT 2008


Author: eliel
Date: Mon Aug 25 07:26:14 2008
New Revision: 139743

URL: http://svn.digium.com/view/asterisk?view=rev&rev=139743
Log:
- Implement emphasis, literal and replaceable parsing inside para elements.
- Now get the Node content in ast_xml_get_text().
- Don't remove spaces while cleaning up the text elements, just tabs (be sure while formatting the
  xml, that spaces wont be removed!).


Modified:
    team/group/appdocsxml/main/pbx.c
    team/group/appdocsxml/main/xml.c

Modified: team/group/appdocsxml/main/pbx.c
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/main/pbx.c?view=diff&rev=139743&r1=139742&r2=139743
==============================================================================
--- team/group/appdocsxml/main/pbx.c (original)
+++ team/group/appdocsxml/main/pbx.c Mon Aug 25 07:26:14 2008
@@ -2967,19 +2967,19 @@
 static char *xmldoc_string_cleanup(const char *text)
 {
 	int retlen=0, c;
-	char *rettmp, *rettext, *tmp, *trim;
+	char *rettmp, *rettext, *tmp;
 
 	/* Alloc a buffer of at least the same size as 'text' */
 	if (!text || !(rettmp = calloc(1, strlen(text) + 1))) {
 		return NULL;
 	}
 
-	tmp = ast_skip_blanks(text);
+	tmp = (char *)text;
 	while (*tmp) {
 		if (*tmp == '\n' || *tmp == '\r') {
 			tmp++;
 			c = 0;
-			while (*tmp == ' ' || *tmp == '\t' || *tmp == '\r' || *tmp == '\n') {
+			while (*tmp == '\t' || *tmp == '\r' || *tmp == '\n') {
 				tmp++, c++;
 			}
 			if (c) {
@@ -2992,9 +2992,7 @@
 		tmp++;
 	}
 
-	trim = ast_trim_blanks(rettmp);
-	
-	rettext = ast_strdup(trim);
+	rettext = ast_strdup(rettmp);
 	ast_free(rettmp);
 
 	return rettext;
@@ -3352,7 +3350,9 @@
 static int xmldoc_parse_para(ast_xml_node *node, const char *tabs, const char *posttabs, int *len, char **buffer)
 {
 	ast_xml_text *tmptext;
+	ast_xml_node *tmp;
 	char *cleantext;
+	char *sepinit, *sepend;
 	int ret = 0;
 
 	if (!node || !node->AST_XML_CHILD) {
@@ -3363,20 +3363,42 @@
 		return ret;
 	}
 
+        *buffer = ast_realloc(*buffer, *len + xmldoc_postbrlen(tabs) + 1);
+        *len += sprintf(*buffer + *len, "%s", tabs);
+
 	ret = 1;
-	/* Get the text inside the <para> element and append it to buffer. */
-	tmptext = ast_xml_get_text(node);
-	if (tmptext) {
-		/* Strip \n etc. */
-		cleantext = xmldoc_string_cleanup(tmptext);
-		ast_xml_free_text(tmptext);
-		if (cleantext) {
-			*buffer = ast_realloc(*buffer, *len + strlen(tabs) + strlen(cleantext) + strlen(posttabs) + 1);
-			*len += sprintf(*buffer + *len, "%s%s%s", tabs, cleantext, posttabs);
-			ast_free(cleantext);
-			ret = 2;
-		}
-	}
+
+	tmp = node->AST_XML_CHILD;
+	while (tmp) {
+		if (!strcasecmp((char *)tmp->AST_XML_NAME, "literal")) {
+			sepinit = sepend = "'";
+		} else if (!strcasecmp((char *)tmp->AST_XML_NAME, "replaceable")) {
+			sepinit = "<";
+			sepend = ">";
+		} else if (!strcasecmp((char *)tmp->AST_XML_NAME, "emphasis")) {
+			sepinit = sepend = "*";
+		} else {
+			sepinit = sepend = "";
+		}
+
+		/* Get the text inside the <para> element and append it to buffer. */
+		tmptext = ast_xml_get_text(tmp);
+		if (tmptext) {
+			/* Strip \n etc. */
+			cleantext = xmldoc_string_cleanup(tmptext);
+			ast_xml_free_text(tmptext);
+			if (cleantext) {
+				*buffer = ast_realloc(*buffer, *len + strlen(cleantext) + strlen(sepinit) + strlen(sepend) + 3);
+				*len += sprintf(*buffer + *len, "%s%s%s", sepinit, cleantext, sepend);
+				ast_free(cleantext);
+				ret = 2;
+			}
+		}
+		tmp = tmp->AST_XML_NEXT;
+	}
+
+	*buffer = ast_realloc(*buffer, *len + xmldoc_postbrlen(posttabs) + 1);
+        *len += sprintf(*buffer + *len, "%s", posttabs);
 
 	return ret;
 }

Modified: team/group/appdocsxml/main/xml.c
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/main/xml.c?view=diff&rev=139743&r1=139742&r2=139743
==============================================================================
--- team/group/appdocsxml/main/xml.c (original)
+++ team/group/appdocsxml/main/xml.c Mon Aug 25 07:26:14 2008
@@ -161,11 +161,11 @@
 
 char *ast_xml_get_text(ast_xml_node *node)
 {
-	if (!node || !node->children) {
+	if (!node) {
 		return NULL;
 	}
 
-	return (char *)xmlNodeListGetString(node->doc, node->children, 0);
+	return (char *)xmlNodeGetContent(node);
 }
 
 #endif /* defined(HAVE_LIBXML2) && !defined(AST_XML_IMPLEMENTATION) */




More information about the svn-commits mailing list