[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xmlbeans-dev
Subject:    [jira] Commented: (XMLBEANS-22) xmlText trims whitespace within
From:       "Martin Heitz (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date:       2010-08-10 7:24:16
Message-ID: 13047597.249661281425056758.JavaMail.jira () thor
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/XMLBEANS-22?page=com.atlassian.jira.plugin \
.system.issuetabpanels:comment-tabpanel&focusedCommentId=12896790#action_12896790 ] 

Martin Heitz commented on XMLBEANS-22:
--------------------------------------

Because there is no support here I patched locally the method next of the class \
Saver.PrettySaveCur to

        boolean next ( )
        {
            int k;

            if (_txt != null)
            {
                assert _txt.length() > 0;
                assert !_cur.isText();
                _txt = null;
                _isTextCData = false;
                k = _cur.kind();
            }
            else
            {
                int prevKind = k = _cur.kind();

                if (!_cur.next())
                    return false;

                _sb.delete( 0, _sb.length() );

                assert _txt == null;

                // place any text encountered in the buffer
                if (_cur.isText())
                {
                    // _cur.isTextCData() is expensive do it only if \
                useCDataBookmarks option is enabled
                    _isTextCData = _useCDataBookmarks && _cur.isTextCData();
                    CharUtil.getString( _sb, _cur.getChars(), _cur._offSrc, \
_cur._cchSrc );  _cur.next();
                    // vvvvv fix: do not trim unconditionally  vvvvv 
//                	trim( _sb );
                    k = _cur.kind();
                    if (prevKind == ELEM && k == -ELEM) {
//                		System.out.println("not trimming '" + _sb + "' -- prevKind==" + \
prevKind+ ", k=" + k);  } else {
//                		System.out.println("trimming '" + _sb + "' -- prevKind==" + \
prevKind + ", k=" + k);  trim( _sb );
//                    	System.out.println("... to   '" + _sb + "'");
                    }
                    // ^^^^^ fix: do not trim unconditionally  ^^^^^ 
                }

                k = _cur.kind();

                // Check for non leaf, _prettyIndent < 0 means that the save is all \
on one line

                if (_prettyIndent >= 0 &&
                      prevKind != COMMENT && prevKind != PROCINST && (prevKind != \
ELEM || k != -ELEM)) //                if (prevKind != COMMENT && prevKind != \
PROCINST && (prevKind != ELEM || k != -ELEM))  {
                    if (_sb.length() > 0)
                    {
                        _sb.insert( 0, _newLine );
                        spaces( _sb, _newLine.length(), _prettyOffset + _prettyIndent \
* _depth );  }

                    if (k != -ROOT)
                    {
                        if (prevKind != ROOT)
                            _sb.append( _newLine );

                        int d = k < 0 ? _depth - 1 : _depth;
                        spaces( _sb, _sb.length(), _prettyOffset + _prettyIndent * d \
);  }
                }

                if (_sb.length() > 0)
                {
                    _txt = _sb.toString();
                    k = TEXT;
                }
            }

            if (k == ELEM)
                _depth++;
            else if (k == -ELEM)
                _depth--;

            return true;
        }

Good luck, Mattin 

P.S. Of course no guarantees that this does not have any side effects. I'm using this \
code now for more than a month and have not not notified any problem.


> xmlText trims whitespace within elements if prettyprint is on
> -------------------------------------------------------------
> 
> Key: XMLBEANS-22
> URL: https://issues.apache.org/jira/browse/XMLBEANS-22
> Project: XMLBeans
> Issue Type: Bug
> Affects Versions: Version 1
> Environment: Java 1.4.2_03, Win 2K
> Reporter: Aaron Dunlop
> Fix For: TBD
> 
> Attachments: whitespace-patch
> 
> 
> When called with XmlOptions.SAVE_PRETTY_PRINT, xmlText trims whitespace within an \
> element - e.g., ' a ' is converted to 'a'. Unless I'm completely missing something, \
> the formatter shouldn't ever change the contents of an element. The following test \
> snippet reveals the problem: XmlObject xdoc = XmlObject.Factory.parse("<test>  \
> </test>"); Assert.assertEquals("<test>  </test>", xdoc.xmlText());
> Assert.assertEquals("<test>  </test>" + newLine, xdoc.toString());
> The current build from CVS returns <test/>[newline] instead of <test>  \
> <test>[newline]. Complete testcase and patch to follow.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic