mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
5c646afffd
Backed out changeset 8439a009837d (bug 1113238) Backed out changeset 34b89a4f9dea (bug 1113238) Backed out changeset ce0ed9dc4d6d (bug 1113238) Backed out changeset 9dd632bab2aa (bug 1113238) CLOSED TREE
157 lines
5.6 KiB
C++
157 lines
5.6 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/*
|
|
* nsIContentSerializer implementation that can be used with an
|
|
* nsIDocumentEncoder to convert an XHTML (not HTML!) DOM to an XHTML
|
|
* string that could be parsed into more or less the original DOM.
|
|
*/
|
|
|
|
#ifndef nsXHTMLContentSerializer_h__
|
|
#define nsXHTMLContentSerializer_h__
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "nsXMLContentSerializer.h"
|
|
#include "nsIEntityConverter.h"
|
|
#include "nsString.h"
|
|
#include "nsTArray.h"
|
|
|
|
class nsIContent;
|
|
class nsIAtom;
|
|
|
|
class nsXHTMLContentSerializer : public nsXMLContentSerializer {
|
|
public:
|
|
nsXHTMLContentSerializer();
|
|
virtual ~nsXHTMLContentSerializer();
|
|
|
|
NS_IMETHOD Init(uint32_t flags, uint32_t aWrapColumn,
|
|
const char* aCharSet, bool aIsCopying,
|
|
bool aRewriteEncodingDeclaration) MOZ_OVERRIDE;
|
|
|
|
NS_IMETHOD AppendText(nsIContent* aText,
|
|
int32_t aStartOffset,
|
|
int32_t aEndOffset,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
protected:
|
|
|
|
|
|
virtual bool CheckElementStart(nsIContent * aContent,
|
|
bool & aForceFormat,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
virtual void AppendEndOfElementStart(nsIContent *aOriginalElement,
|
|
nsIAtom * aName,
|
|
int32_t aNamespaceID,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
virtual void AfterElementStart(nsIContent * aContent,
|
|
nsIContent *aOriginalElement,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
virtual bool CheckElementEnd(nsIContent * aContent,
|
|
bool & aForceFormat,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
virtual void AfterElementEnd(nsIContent * aContent,
|
|
nsAString& aStr) MOZ_OVERRIDE;
|
|
|
|
virtual bool LineBreakBeforeOpen(int32_t aNamespaceID, nsIAtom* aName) MOZ_OVERRIDE;
|
|
virtual bool LineBreakAfterOpen(int32_t aNamespaceID, nsIAtom* aName) MOZ_OVERRIDE;
|
|
virtual bool LineBreakBeforeClose(int32_t aNamespaceID, nsIAtom* aName) MOZ_OVERRIDE;
|
|
virtual bool LineBreakAfterClose(int32_t aNamespaceID, nsIAtom* aName) MOZ_OVERRIDE;
|
|
|
|
bool HasLongLines(const nsString& text, int32_t& aLastNewlineOffset);
|
|
|
|
// functions to check if we enter in or leave from a preformated content
|
|
virtual void MaybeEnterInPreContent(nsIContent* aNode) MOZ_OVERRIDE;
|
|
virtual void MaybeLeaveFromPreContent(nsIContent* aNode) MOZ_OVERRIDE;
|
|
|
|
virtual void SerializeAttributes(nsIContent* aContent,
|
|
nsIContent *aOriginalElement,
|
|
nsAString& aTagPrefix,
|
|
const nsAString& aTagNamespaceURI,
|
|
nsIAtom* aTagName,
|
|
nsAString& aStr,
|
|
uint32_t aSkipAttr,
|
|
bool aAddNSAttr) MOZ_OVERRIDE;
|
|
|
|
bool IsFirstChildOfOL(nsIContent* aElement);
|
|
|
|
void SerializeLIValueAttribute(nsIContent* aElement,
|
|
nsAString& aStr);
|
|
bool IsShorthandAttr(const nsIAtom* aAttrName,
|
|
const nsIAtom* aElementName);
|
|
virtual void AppendAndTranslateEntities(const nsAString& aStr,
|
|
nsAString& aOutputStr) MOZ_OVERRIDE;
|
|
nsresult EscapeURI(nsIContent* aContent,
|
|
const nsAString& aURI,
|
|
nsAString& aEscapedURI);
|
|
|
|
nsCOMPtr<nsIEntityConverter> mEntityConverter;
|
|
|
|
/*
|
|
* isHTMLParser should be set to true by the HTML parser which inherits from
|
|
* this class. It avoids to redefine methods just for few changes.
|
|
*/
|
|
bool mIsHTMLSerializer;
|
|
|
|
bool mDoHeader;
|
|
bool mIsCopying; // Set to true only while copying
|
|
|
|
/*
|
|
* mDisableEntityEncoding is higher than 0 while the serializer is serializing
|
|
* the content of a element whose content is considerd CDATA by the
|
|
* serializer (such elements are 'script', 'style', 'noscript' and
|
|
* possibly others in XHTML) This doesn't have anything to do with if the
|
|
* element is defined as CDATA in the DTD, it simply means we'll
|
|
* output the content of the element without doing any entity encoding
|
|
* what so ever.
|
|
*/
|
|
int32_t mDisableEntityEncoding;
|
|
|
|
// This is to ensure that we only do meta tag fixups when dealing with
|
|
// whole documents.
|
|
bool mRewriteEncodingDeclaration;
|
|
|
|
// To keep track of First LI child of OL in selected range
|
|
bool mIsFirstChildOfOL;
|
|
|
|
// To keep track of startvalue of OL and first list item for nested lists
|
|
struct olState {
|
|
olState(int32_t aStart, bool aIsFirst)
|
|
: startVal(aStart),
|
|
isFirstListItem(aIsFirst)
|
|
{
|
|
}
|
|
|
|
olState(const olState & aOlState)
|
|
{
|
|
startVal = aOlState.startVal;
|
|
isFirstListItem = aOlState.isFirstListItem;
|
|
}
|
|
|
|
// the value of the start attribute in the OL
|
|
int32_t startVal;
|
|
|
|
// is true only before the serialization of the first li of an ol
|
|
// should be false for other li in the list
|
|
bool isFirstListItem;
|
|
};
|
|
|
|
// Stack to store one olState struct per <OL>.
|
|
nsAutoTArray<olState, 8> mOLStateStack;
|
|
|
|
bool HasNoChildren(nsIContent* aContent);
|
|
};
|
|
|
|
nsresult
|
|
NS_NewXHTMLContentSerializer(nsIContentSerializer** aSerializer);
|
|
|
|
#endif
|