You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2001/01/25 18:13:34 UTC

cvs commit: xml-xalan/c/src/XMLSupport FormatterToHTML.cpp FormatterToHTML.hpp

dbertoni    01/01/25 09:13:34

  Modified:    c/src/XMLSupport FormatterToHTML.cpp FormatterToHTML.hpp
  Log:
  Fixed problems with HTML formatting.
  
  Revision  Changes    Path
  1.46      +58 -85    xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp
  
  Index: FormatterToHTML.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- FormatterToHTML.cpp	2001/01/18 22:51:15	1.45
  +++ FormatterToHTML.cpp	2001/01/25 17:13:30	1.46
  @@ -117,7 +117,8 @@
   	m_inBlockElem(false),
   	m_isRawStack(),
   	m_isScriptOrStyleElem(false),
  -	m_escapeURLs(false),
  +	m_escapeURLs(true),
  +	m_isFirstElement(false),
   	m_elementLevel(0)
   {
   	initCharsMap();
  @@ -207,6 +208,7 @@
   	// Reset this, just in case...
   	m_elementLevel = 0;
   
  +	m_isFirstElement = true;
       m_startNewLine = false;
   	m_shouldWriteXMLHeader = false;
   
  @@ -271,27 +273,30 @@
   	writeParentTagEnd();
   
   	const ElemDesc&		elemDesc =
  -		getElemDesc(name);
  +			getElemDesc(name);
   
  -    const bool	isBlockElement = elemDesc.is(ElemDesc::BLOCK);
  +	const bool	isBlockElement = elemDesc.is(ElemDesc::BLOCK);
   	const bool	isHeadElement = elemDesc.is(ElemDesc::HEADELEM);
   
   	m_isScriptOrStyleElem = 
  -		equalsIgnoreCaseASCII(name, c_wstr(s_scriptString)) ||
  -		equalsIgnoreCaseASCII(name, c_wstr(s_styleString));
  +			equalsIgnoreCaseASCII(name, c_wstr(s_scriptString)) ||
  +			equalsIgnoreCaseASCII(name, c_wstr(s_styleString));
   
  +	// Increment the level...
  +	++m_elementLevel;
  +
   	if(m_ispreserve == true)
   	{
   		m_ispreserve = false;
   	}
  -    else if(m_doIndent &&
  -			m_elementLevel > 0 &&
  +	else if(m_doIndent &&
  +			m_elementLevel > 0 && m_isFirstElement == false &&
   			(m_inBlockElem == false || isBlockElement == true))
  -    {
  +	{
   		m_startNewLine = true;
   
   		indent(m_currentIndent);
  -    }
  +	}
   
   	m_inBlockElem = !isBlockElement;
   
  @@ -303,33 +308,33 @@
   
   	const unsigned int	nAttrs = attrs.getLength();
   
  -    for (unsigned int i = 0;  i < nAttrs ;  i++)
  -    {
  +	for (unsigned int i = 0;  i < nAttrs ;  i++)
  +	{
   		processAttribute(attrs.getName(i), attrs.getValue(i), elemDesc);
  -    }
  +	}
   
  -    // Flag the current element as not yet having any children.
  -    openElementForChildren();
  +	// Flag the current element as not yet having any children.
  +	openElementForChildren();
   
  -    m_currentIndent += m_indent;
  +	m_currentIndent += m_indent;
       
  -    m_isprevtext = false;
  +	m_isprevtext = false;
   
   	if (isHeadElement)
  -    {
  -      writeParentTagEnd();
  +	{
  +		writeParentTagEnd();
   
  -      if (m_doIndent)
  -        indent(m_currentIndent);
  +		if (m_doIndent)
  +			indent(m_currentIndent);
   
  -      accumContent(s_metaString);
  -      accumContent(getEncoding());      
  -      accumContent(XalanUnicode::charQuoteMark);
  -      accumContent(XalanUnicode::charGreaterThanSign);
  -    }
  +		accumContent(s_metaString);
  +		accumContent(getEncoding());      
  +		accumContent(XalanUnicode::charQuoteMark);
  +		accumContent(XalanUnicode::charGreaterThanSign);
  +	}
   
  -	// Increment the level...
  -	++m_elementLevel;
  +	// We've written the first element, so turn off the flag...
  +	m_isFirstElement = false;
   
   	assert(m_elementLevel > 0);
   }
  @@ -339,34 +344,34 @@
   void
   FormatterToHTML::endElement(const XMLCh* const	name)
   {
  -    m_currentIndent -= m_indent;
  +	m_currentIndent -= m_indent;
   
  -    const bool	hasChildNodes = childNodesWereAdded();
  +	const bool	hasChildNodes = childNodesWereAdded();
   
  -    m_isRawStack.pop_back();
  +	m_isRawStack.pop_back();
       
  -    const ElemDesc&		elemDesc =
  -		getElemDesc(name);
  +	const ElemDesc&		elemDesc =
  +			getElemDesc(name);
   
  -    const bool	isBlockElement = elemDesc.is(ElemDesc::BLOCK);
  +	const bool	isBlockElement = elemDesc.is(ElemDesc::BLOCK);
   
  -    bool shouldIndent = false;
  +	bool shouldIndent = false;
   
  -    if(m_ispreserve == true)
  -    {
  +	if(m_ispreserve == true)
  +	{
   		m_ispreserve = false;
  -    }
  -    else if(m_doIndent == true && (m_inBlockElem == false || isBlockElement == true))
  -    {
  +	}
  +	else if(m_doIndent == true && (m_inBlockElem == false || isBlockElement == true))
  +	{
   		m_startNewLine = true;
   
   		shouldIndent = true;
  -    }
  +	}
   
  -    m_inBlockElem = !isBlockElement;
  +	m_inBlockElem = !isBlockElement;
   
  -    if (hasChildNodes) 
  -    {
  +	if (hasChildNodes) 
  +	{
   		if (shouldIndent == true)
   		{
   			indent(m_currentIndent);
  @@ -377,8 +382,8 @@
   		accumName(name);
   		accumContent(XalanUnicode::charGreaterThanSign);
   	}
  -    else
  -    {
  +	else
  +	{
   		if(elemDesc.is(ElemDesc::EMPTY) == false)
   		{
   			accumContent(XalanUnicode::charGreaterThanSign);
  @@ -392,27 +397,25 @@
   		{
   			accumContent(XalanUnicode::charGreaterThanSign);
   		}
  -    }
  +	}
   
  -    if (elemDesc.is(ElemDesc::WHITESPACESENSITIVE) == true)
  +	if (elemDesc.is(ElemDesc::WHITESPACESENSITIVE) == true)
   	{
   		m_ispreserve = true;
   	}
   
  -    if (hasChildNodes == true)
  -    {
  +	if (hasChildNodes == true)
  +	{
   		if (m_preserves.empty() == false)
   		{
   			m_preserves.pop_back();
   		}
  -    }
  +	}
   
  -    m_isprevtext = false;
  +	m_isprevtext = false;
   
   	// Decrement the level...
   	--m_elementLevel;
  -
  -	assert(m_elementLevel >= 0);
   }
   
   
  @@ -550,8 +553,8 @@
   {
   	// Use a fairly nasty hack to tell if the next node is supposed to be 
   	// unescaped text.
  -	if(equals(target, c_wstr(s_xsltNextIsRawString)) == true &&
  -	   equals(data, c_wstr(s_formatterToDOMString)) == true)
  +	if(equals(target, s_xsltNextIsRawString) == true &&
  +	   equals(data, s_formatterToDOMString) == true)
   	{
   		m_nextIsRaw = true;
   	}
  @@ -809,35 +812,6 @@
   			const XalanDOMChar*		string,
   			const XalanDOMString	encoding)
   {
  -#if 1
  -	const unsigned int	len = length(string);
  -
  -    for (unsigned int i = 0; i < len; ++i)
  -    {
  -		const XalanDOMChar	ch = string[i];
  -
  -		// if first 8 bytes are 0, no need to append them.
  -		if (ch < 9 || ch > 127 || ch == XalanUnicode::charQuoteMark || ch == XalanUnicode::charSpace)
  -		{
  -			const unsigned int	b1 = (ch & 0xFF00) >> 8;
  -			const unsigned int	b2 = ch & 0x00FF;
  -
  -			if(b1 != 0)
  -			{
  -				accumContent(XalanUnicode::charPercentSign);
  -
  -				accumContent(UnsignedLongToHexDOMString(b1));
  -			}
  -
  -			accumContent(XalanUnicode::charPercentSign);
  -			accumContent(UnsignedLongToHexDOMString(b2));		
  -		}	
  -		else
  -		{
  -			accumContent(ch);
  -		}
  -	}
  -#else
   	// http://www.ietf.org/rfc/rfc2396.txt says:
   	// A URI is always in an "escaped" form, since escaping or unescaping a
   	// completed URI might change its semantics.  Normally, the only time
  @@ -1006,7 +980,6 @@
   			accumContent(ch);
   		}
   	}
  -#endif
   }
   
   
  
  
  
  1.22      +7 -1      xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp
  
  Index: FormatterToHTML.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- FormatterToHTML.hpp	2001/01/09 16:00:30	1.21
  +++ FormatterToHTML.hpp	2001/01/25 17:13:31	1.22
  @@ -58,7 +58,7 @@
   #define FORMATTERTOHTML_HEADER_GUARD_1357924680
   
   /**
  - * $Id: FormatterToHTML.hpp,v 1.21 2001/01/09 16:00:30 auriemma Exp $
  + * $Id: FormatterToHTML.hpp,v 1.22 2001/01/25 17:13:31 dbertoni Exp $
    * 
    * $State: Exp $
    * 
  @@ -443,6 +443,12 @@
   	bool			m_isScriptOrStyleElem;
   
   	bool			m_escapeURLs;
  +
  +	/**
  +	 * A flag so we know whether or not we've put out the first
  +	 * element.
  +	 */
  +	bool			m_isFirstElement;
   
   	/**
   	 * A counter so we can tell if we're inside the document element.