📄 markup.h
字号:
// Copyright (c) 1995 James Clark// See the file COPYING for copying permission.#ifndef Markup_INCLUDED#define Markup_INCLUDED 1#ifdef __GNUG__#pragma interface#endif#include "StringC.h"#include "Syntax.h"#include "Sd.h"#include "Vector.h"#include "Text.h"#include "SdText.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass EntityOrigin;struct SP_API MarkupItem { MarkupItem(); MarkupItem(const MarkupItem &); ~MarkupItem(); void operator=(const MarkupItem &); unsigned char type; unsigned char index; union { size_t nChars; ConstPtr<Origin> *origin; // type == entityStart Text *text; // type == literal SdText *sdText; // type == sdLiteral };};class InputSource;class SP_API Markup {public: enum Type { reservedName, sdReservedName, name, nameToken, attributeValue, number, comment, s, shortref, delimiter, refEndRe, entityStart, entityEnd, literal, sdLiteral }; Markup(); size_t size() const; void clear(); void resize(size_t); void addDelim(Syntax::DelimGeneral); void addReservedName(Syntax::ReservedName, const InputSource *); void addReservedName(Syntax::ReservedName, const StringC &); void addSdReservedName(Sd::ReservedName, const InputSource *); void addSdReservedName(Sd::ReservedName, const Char *, size_t); void addS(Char); void addS(const InputSource *); void addRefEndRe(); void addShortref(const InputSource *); void addCommentStart(); void addCommentChar(Char); void addName(const InputSource *); void addName(const Char *, size_t); void addNameToken(const InputSource *); void addNumber(const InputSource *); void addAttributeValue(const InputSource *); void addEntityStart(const Ptr<EntityOrigin> &); void addEntityEnd(); void addLiteral(const Text &); void addSdLiteral(const SdText &); void changeToAttributeValue(size_t index); void changeToSdReservedName(size_t index, Sd::ReservedName); void swap(Markup &);private: StringC chars_; Vector<MarkupItem> items_; friend class MarkupIter;};class Location;class SP_API MarkupIter {public: MarkupIter(const Markup &); Markup::Type type() const; Boolean valid() const; void advance(); // This updates a Location. void advance(Location &, const ConstPtr<Syntax> &); size_t index() const; const Char *charsPointer() const; size_t charsLength() const; const Text &text() const; const EntityOrigin *entityOrigin() const; // valid for type == entityStart const SdText &sdText() const; Syntax::DelimGeneral delimGeneral() const; Syntax::ReservedName reservedName() const; Sd::ReservedName sdReservedName() const;private: const Char *chars_; Vector<MarkupItem>::const_iterator items_; size_t nItems_; size_t index_; size_t charIndex_;};inlinevoid Markup::clear(){ chars_.resize(0); items_.resize(0);}inlinesize_t Markup::size() const{ return items_.size();}inlineBoolean MarkupIter::valid() const{ return index_ < nItems_;}inlinesize_t MarkupIter::index() const{ return index_;}inlineMarkup::Type MarkupIter::type() const{ return Markup::Type(items_[index_].type);}inlineconst EntityOrigin *MarkupIter::entityOrigin() const{ return (*items_[index_].origin)->asEntityOrigin();}inlineconst Char *MarkupIter::charsPointer() const{ return chars_ + charIndex_;}inlinesize_t MarkupIter::charsLength() const{ return items_[index_].nChars;}inlineconst Text &MarkupIter::text() const{ return *items_[index_].text;}inlineconst SdText &MarkupIter::sdText() const{ return *items_[index_].sdText;}inlineSyntax::DelimGeneral MarkupIter::delimGeneral() const{ return Syntax::DelimGeneral(items_[index_].index);}inlineSyntax::ReservedName MarkupIter::reservedName() const{ return Syntax::ReservedName(items_[index_].index);}inlineSd::ReservedName MarkupIter::sdReservedName() const{ return Sd::ReservedName(items_[index_].index);}#ifdef SP_NAMESPACE}#endif#endif /* not Markup_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -