Back to index

lightning-sunbird  0.9+nobinonly
txOutputFormat.cpp
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is TransforMiiX XSLT processor code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 2001
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *   Peter Van der Beken <peterv@propagandism.org>
00024  *
00025  * Alternatively, the contents of this file may be used under the terms of
00026  * either the GNU General Public License Version 2 or later (the "GPL"), or
00027  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00028  * in which case the provisions of the GPL or the LGPL are applicable instead
00029  * of those above. If you wish to allow use of your version of this file only
00030  * under the terms of either the GPL or the LGPL, and not to allow others to
00031  * use your version of this file under the terms of the MPL, indicate your
00032  * decision by deleting the provisions above and replace them with the notice
00033  * and other provisions required by the GPL or the LGPL. If you do not delete
00034  * the provisions above, a recipient may use your version of this file under
00035  * the terms of any one of the MPL, the GPL or the LGPL.
00036  *
00037  * ***** END LICENSE BLOCK ***** */
00038 
00039 #include "txOutputFormat.h"
00040 #include "XMLUtils.h"
00041 
00042 txOutputFormat::txOutputFormat() : mMethod(eMethodNotSet),
00043                                    mOmitXMLDeclaration(eNotSet),
00044                                    mStandalone(eNotSet),
00045                                    mIndent(eNotSet)
00046 {
00047 }
00048 
00049 txOutputFormat::~txOutputFormat()
00050 {
00051     txListIterator iter(&mCDATASectionElements);
00052     while (iter.hasNext())
00053         delete (txExpandedName*)iter.next();
00054 }
00055 
00056 void txOutputFormat::reset()
00057 {
00058     mMethod = eMethodNotSet;
00059     mVersion.Truncate();
00060     if (mEncoding.IsEmpty())
00061         mOmitXMLDeclaration = eNotSet;
00062     mStandalone = eNotSet;
00063     mPublicId.Truncate();
00064     mSystemId.Truncate();
00065     txListIterator iter(&mCDATASectionElements);
00066     while (iter.hasNext())
00067         delete (txExpandedName*)iter.next();
00068     mIndent = eNotSet;
00069     mMediaType.Truncate();
00070 }
00071 
00072 void txOutputFormat::merge(txOutputFormat& aOutputFormat)
00073 {
00074     if (mMethod == eMethodNotSet)
00075         mMethod = aOutputFormat.mMethod;
00076 
00077     if (mVersion.IsEmpty())
00078         mVersion = aOutputFormat.mVersion;
00079 
00080     if (mEncoding.IsEmpty())
00081         mEncoding = aOutputFormat.mEncoding;
00082 
00083     if (mOmitXMLDeclaration == eNotSet)
00084         mOmitXMLDeclaration = aOutputFormat.mOmitXMLDeclaration;
00085 
00086     if (mStandalone == eNotSet)
00087         mStandalone = aOutputFormat.mStandalone;
00088 
00089     if (mPublicId.IsEmpty())
00090         mPublicId = aOutputFormat.mPublicId;
00091 
00092     if (mSystemId.IsEmpty())
00093         mSystemId = aOutputFormat.mSystemId;
00094 
00095     txListIterator iter(&aOutputFormat.mCDATASectionElements);
00096     txExpandedName* qName;
00097     while ((qName = (txExpandedName*)iter.next())) {
00098         mCDATASectionElements.add(qName);
00099         // XXX We need txList.clear()
00100         iter.remove();
00101     }
00102 
00103     if (mIndent == eNotSet)
00104         mIndent = aOutputFormat.mIndent;
00105 
00106     if (mMediaType.IsEmpty())
00107         mMediaType = aOutputFormat.mMediaType;
00108 }
00109 
00110 void txOutputFormat::setFromDefaults()
00111 {
00112     switch (mMethod) {
00113         case eMethodNotSet:
00114         {
00115             mMethod = eXMLOutput;
00116             // Fall through
00117         }
00118         case eXMLOutput:
00119         {
00120             if (mVersion.IsEmpty())
00121                 mVersion.AppendLiteral("1.0");
00122 
00123             if (mEncoding.IsEmpty())
00124                 mEncoding.AppendLiteral("UTF-8");
00125 
00126             if (mOmitXMLDeclaration == eNotSet)
00127                 mOmitXMLDeclaration = eFalse;
00128 
00129             if (mIndent == eNotSet)
00130                 mIndent = eFalse;
00131 
00132             if (mMediaType.IsEmpty())
00133                 mMediaType.AppendLiteral("text/xml");
00134 
00135             break;
00136         }
00137         case eHTMLOutput:
00138         {
00139             if (mVersion.IsEmpty())
00140                 mVersion.AppendLiteral("4.0");
00141 
00142             if (mEncoding.IsEmpty())
00143                 mEncoding.AppendLiteral("UTF-8");
00144 
00145             if (mIndent == eNotSet)
00146                 mIndent = eTrue;
00147 
00148             if (mMediaType.IsEmpty())
00149                 mMediaType.AppendLiteral("text/html");
00150 
00151             break;
00152         }
00153         case eTextOutput:
00154         {
00155             if (mEncoding.IsEmpty())
00156                 mEncoding.AppendLiteral("UTF-8");
00157 
00158             if (mMediaType.IsEmpty())
00159                 mMediaType.AppendLiteral("text/plain");
00160 
00161             break;
00162         }
00163     }
00164 }