📄 codeparser.cpp
字号:
/***************************************************************************/
/* NOTE: */
/* This document is copyright (c) by Oz Solomon and Yonat Sharon, and is */
/* bound by the MIT open source license. */
/* See License.txt or visit www.opensource.org/licenses/mit-license.html */
/***************************************************************************/
#include "CodeParser.h"
#include "CodeState.h"
const CodeParser::Datum CodeParser::cDefaultDatum = '\0';
CodeParser::CodeParser(const CodeState* initialState, Context* c)
: itsState(initialState), itsInitialState(initialState), itsContext(c),
itsPosition(0), itsMarkedPosition(-1)
{}
void CodeParser::Process(Datum d)
{
CodeState::const_iterator effectIter( itsState->find(d) );
CodeState::const_iterator notFound( itsState->end() );
if ( notFound != effectIter
|| notFound != (effectIter = itsState->find(cDefaultDatum)) ) {
const CodeEffect& effect = (*effectIter).second;
if (effect.markPosition)
itsMarkedPosition = itsPosition;
if (effect.action != 0 && itsContext)
(itsContext->*effect.action)(itsMarkedPosition);
if (effect.next)
itsState = effect.next;
}
++itsPosition;
}
void CodeParser::Process(const Datum* data, Position length)
{ while (length--) Process(*data++); }
void CodeParser::ResetPosition(Position newPosition)
{
Position d = itsPosition - itsMarkedPosition;
itsPosition = newPosition;
itsMarkedPosition = newPosition - d;
}
void CodeParser::ResetState(const CodeState* newState)
{
itsState = newState ? newState : itsInitialState;
}
#ifndef NDEBUG
const char* CodeParser::CurrentState()
{
return itsState->itsName;
}
#endif // NDEBUG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -