[sword-svn] r1906 - trunk/src/modules/filters

Martin Gruner mg.pub at gmx.net
Thu Apr 20 09:07:14 MST 2006


Thanks Troy!
You did the work!

mg

Am Mittwoch, 19. April 2006 22:03 schrieb scribe at crosswire.org:
> Author: scribe
> Date: 2006-04-19 13:03:42 -0700 (Wed, 19 Apr 2006)
> New Revision: 1906
>
> Modified:
>    trunk/src/modules/filters/thmlheadings.cpp
> Log:
> Added fix for adding ThMLHeadings into entry attributes (thanks _mg_)
>
>
> Modified: trunk/src/modules/filters/thmlheadings.cpp
> ===================================================================
> --- trunk/src/modules/filters/thmlheadings.cpp	2006-04-15 22:35:29 UTC (rev
> 1905) +++ trunk/src/modules/filters/thmlheadings.cpp	2006-04-19 20:03:42
> UTC (rev 1906) @@ -9,6 +9,7 @@
>  #include <thmlheadings.h>
>  #include <utilxml.h>
>  #include <utilstr.h>
> +#include <swmodule.h>
>
>  SWORD_NAMESPACE_START
>
> @@ -28,63 +29,110 @@
>
>
>  char ThMLHeadings::processText(SWBuf &text, const SWKey *key, const
> SWModule *module) { -	if (!option) {	// if we don't want headings
> -		SWBuf token;
> -		bool intoken = false;
> -		bool hide = false;
> +	SWBuf token;
> +	bool intoken    = false;
> +	bool hide       = false;
> +	bool preverse   = false;
> +	SWBuf header;
> +	int headerNum   = 0;
> +	int pvHeaderNum = 0;
> +	char buf[254];
> +	XMLTag startTag;
>
> -		SWBuf orig = text;
> -		const char *from = orig.c_str();
> +	SWBuf orig = text;
> +	const char *from = orig.c_str();
> +
> +	XMLTag tag;
>
> -		for (text = ""; *from; from++) {
> -			if (*from == '<') {
> -				intoken = true;
> -				token = "";
> -				continue;
> -			}
> -			if (*from == '>') {	// process tokens
> -				intoken = false;
> +	for (text = ""; *from; ++from) {
> +		if (*from == '<') {
> +			intoken = true;
> +			token = "";
> +
> +			continue;
> +		}
> +		if (*from == '>') {	// process tokens
> +			intoken = false;
>
> -				XMLTag tag(token);
> -
> -				if (!stricmp(tag.getName(), "div")) { //we only want a div tag
> -					//std::cout << tag.toString() << " " << tag.isEndTag() << std::endl;
> -
> -					if (tag.getAttribute("class") && !stricmp(tag.getAttribute("class"),
> "sechead")) { -						hide = true;
> +			if (!strnicmp(token.c_str(), "div", 3) || !strnicmp(token.c_str(),
> "/div", 4)) { +				tag = token;
> +				if (hide && tag.isEndTag()) {
> +					if (module->isProcessEntryAttributes() && (option || (!preverse))) {
> +						if (preverse) {
> +							sprintf(buf, "%i", pvHeaderNum++);
> +							module->getEntryAttributes()["Heading"]["Preverse"][buf] = header;
> +						}
> +						else {
> +							sprintf(buf, "%i", headerNum++);
> +							module->getEntryAttributes()["Heading"]["Interverse"][buf] =
> header; +							if (option) {	// we want the tag in the text
> +								text.append(header);
> +							}
> +						}
> +
> +						StringList attributes = startTag.getAttributeNames();
> +						for (StringList::const_iterator it = attributes.begin(); it !=
> attributes.end(); it++) {
> +							module->getEntryAttributes()["Heading"][buf][it->c_str()] =
> startTag.getAttribute(it->c_str()); +						}
> +					}
> +
> +					hide = false;
> +					if (!option || preverse) {	// we don't want the tag in the text
> anymore +						preverse = false;
>  						continue;
>  					}
> -
> -					if (tag.getAttribute("class") && !stricmp(tag.getAttribute("class"),
> "title")) { +					preverse = false;
> +				}
> +				if (tag.getAttribute("class") && ((!stricmp(tag.getAttribute("class"),
> "sechead")) +										 ||  (!stricmp(tag.getAttribute("class"),
> "title")))) { +
> +					if (!tag.isEndTag()) { //start tag
> +						if (!tag.isEmpty()) {
> +							startTag = tag;
> +
> +/* how do we tell a ThML preverse title from one that should be in the
> text?  probably if any text is before the title...  just assuming all are
> preverse for now +					}
> +					if (tag.getAttribute("subtype") &&
> !stricmp(tag.getAttribute("subtype"), "x-preverse")) { +*/
>  						hide = true;
> +						preverse = true;
> +						header = "";
>  						continue;
> +						}	// move back up under startTag = tag
>  					}
> -
> -					if (hide && tag.isEndTag()) {
> -						hide = false;
> +/* this is where non-preverse will go eventually
> +					if (!tag.isEndTag()) { //start tag
> +						hide = true;
> +						header = "";
> +						if (option) {	// we want the tag in the text
> +							text.append('<');
> +							text.append(token);
> +							text.append('>');
> +						}
>  						continue;
>  					}
> -
> +*/
>  				}
> -
> -				// if not a heading token, keep token in text
> -				if (!hide) {
> -					text += '<';
> -					text += token;
> -					text += '>';
> -				}
> -				continue;
>  			}
>
> -			if (intoken) { //copy token
> -				token += *from;
> +			// if not a heading token, keep token in text
> +			if (!hide) {
> +				text.append('<');
> +				text.append(token);
> +				text.append('>');
>  			}
> -			else if (!hide) { //copy text which is not inside a token
> -				text += *from;
> -			}
> +			continue;
>  		}
> +		if (intoken) { //copy token
> +			token.append(*from);
> +		}
> +		else if (!hide) { //copy text which is not inside a token
> +			text.append(*from);
> +		}
> +		else header.append(*from);
>  	}
>  	return 0;
>  }
>
> +
>  SWORD_NAMESPACE_END
>
> _______________________________________________
> sword-cvs mailing list
> sword-cvs at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-cvs


More information about the sword-cvs mailing list