📄 inputsource.h
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#ifndef InputSource_INCLUDED#define InputSource_INCLUDED 1#ifdef __GNUG__#pragma interface#endif#include "types.h"#include "Link.h"#include "Ptr.h"#include "Location.h"#include "XcharMap.h"#include <stddef.h>#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass Messenger;class NamedCharRef;class CharsetInfo;class SP_API InputSource : public Link {public: enum { eE = -1 }; // end of entity signal virtual ~InputSource(); Xchar get(Messenger &); virtual void pushCharRef(Char ch, const NamedCharRef &) = 0; const Location ¤tLocation() const; const Char *currentTokenStart() const; size_t currentTokenLength() const; const Char *currentTokenEnd() const; Index nextIndex() const; // Discard all but the last character of the current token. void discardInitial(); void startToken(); void startTokenNoMulticode(); void endToken(size_t length); Xchar tokenChar(Messenger &); Xchar tokenCharInBuffer(Messenger &); void ungetToken(); void setMarkupScanTable(const XcharMap<unsigned char> &); Boolean scanSuppress() const; void extendToBufferEnd(); virtual void willNotRewind(); virtual Boolean rewind(Messenger &) = 0; Boolean accessError() const; virtual void setDocCharset(const CharsetInfo &docCharset, const CharsetInfo &emCharset); virtual void willNotSetDocCharset();protected: InputSource(InputSourceOrigin *origin, const Char *start, const Char *end); void reset(const Char *start, const Char *end); InputSourceOrigin *inputSourceOrigin(); void noteCharRef(Index replacementIndex, const NamedCharRef &); const Char *cur(); const Char *start(); const Char *end(); Index startIndex(); void changeBuffer(const Char *newBase, const Char *oldBase); void advanceEnd(const Char *newEnd); void moveLeft(); void moveStart(const Char *newStart); Char nextChar(); void setAccessError();private: InputSource(const InputSource &); // undefined void operator=(const InputSource &); // undefined virtual Xchar fill(Messenger &) = 0; void advanceStart(const Char *to); void advanceStartMulticode(const Char *to); const Char *cur_; const Char *start_; const Char *end_; Location startLocation_; Ptr<InputSourceOrigin> origin_; Boolean accessError_; Boolean scanSuppress_; Boolean scanSuppressSingle_; Index scanSuppressIndex_; Boolean multicode_; XcharMap<unsigned char> markupScanTable_;};inlinevoid InputSource::advanceStart(const Char *to){ if (multicode_) advanceStartMulticode(to); else { startLocation_ += to - start_; start_ = to; }}inlineXchar InputSource::get(Messenger &mgr){ advanceStart(cur_); return cur_ < end_ ? *cur_++ : fill(mgr);}inlinevoid InputSource::startTokenNoMulticode(){ startLocation_ += cur_ - start_; start_ = cur_;}inlinevoid InputSource::startToken(){ advanceStart(cur_);}inlinevoid InputSource::endToken(size_t length){ cur_ = start_ + length;}inlineXchar InputSource::tokenChar(Messenger &mgr){ return cur_ < end_ ? *cur_++ : fill(mgr);}inlineXchar InputSource::tokenCharInBuffer(Messenger &mgr){ return cur_ < end_ ? (Xchar)*cur_++ : eE;}inlinevoid InputSource::extendToBufferEnd(){ cur_ = end_;}inlineconst Char *InputSource::cur(){ return cur_;}inlineconst Char *InputSource::start(){ return start_;}inlineconst Char *InputSource::end(){ return end_;}inlinevoid InputSource::changeBuffer(const Char *newBase, const Char *oldBase){ cur_ = newBase + (cur_ - oldBase); start_ = newBase + (start_ - oldBase); end_ = newBase + (end_ - oldBase);}inlinevoid InputSource::moveStart(const Char *newStart){ cur_ = newStart + (cur_ - start_); end_ = newStart + (end_ - start_); start_ = newStart;}inlinevoid InputSource::advanceEnd(const Char *newEnd){ end_ = newEnd;}inlineChar InputSource::nextChar(){ return *cur_++;}inlineIndex InputSource::startIndex(){ return startLocation_.index();}inlinevoid InputSource::moveLeft(){ start_--; cur_--;}inlinevoid InputSource::noteCharRef(Index replacementIndex, const NamedCharRef &ref){ origin_->noteCharRef(replacementIndex, ref);}inlineconst Location &InputSource::currentLocation() const{ return startLocation_;}inlineconst Char *InputSource::currentTokenStart() const{ return start_;}inlinesize_t InputSource::currentTokenLength() const{ return cur_ - start_;}inlineIndex InputSource::nextIndex() const{ return startLocation_.index() + (cur_ - start_);}inlineconst Char *InputSource::currentTokenEnd() const{ return cur_;}inlinevoid InputSource::discardInitial(){ advanceStart(cur_ - 1);}inlinevoid InputSource::ungetToken(){ cur_ = start_;}inlinevoid InputSource::setMarkupScanTable(const XcharMap<unsigned char> &table){ markupScanTable_ = table; multicode_ = 1;}inlineBoolean InputSource::scanSuppress() const{ return scanSuppress_ && (!scanSuppressSingle_ || startLocation_.index() == scanSuppressIndex_);}inlineInputSourceOrigin *InputSource::inputSourceOrigin(){ return origin_.pointer();}inlinevoid InputSource::setAccessError(){ accessError_ = 1;}inlineBoolean InputSource::accessError() const{ return accessError_;}#ifdef SP_NAMESPACE}#endif#endif /* not InputSource_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -