84 virtual void OutputLog(LPCTSTR lpszLog,
bool boHasErrMsg) = 0;
149 m_cInterruptInfo.Empty();
150 m_strLogLastName.
Empty();
160 m_piListener = piListener;
169 m_piExpander = piExpander;
178 m_eLogLevel = eLevel;
212 m_MessageBug(
"ファイル'%s'が読み込めません。",
CAscii(lpszName));
232 else if ( res.
IsNop() )
284 tFunc = m_documents.
FindFunc(lpszFuncName);
312 tFunc = m_documents.
FindFunc(lpszFuncName);
326 m_MessageBug(
"引数のない func '%s'に引数を渡しています。", lpszFuncName);
336 m_MessageBug(
"func '%s'(引数は %d個)に、%d個のに引数を渡しています。",
346 for (
size_t i = 0; i < dim; i++ )
351 value = aValues.
At(i);
391 INT_PTR iStartVarLevel = m_variable.
GetLevel();
392 INT_PTR iStartContentsLevel = m_documents.
GetLevel();
416 m_MessageBug(res,
"文字列表記にエラーがあります。");
419 else if ( token ==
";" )
424 else if ( token ==
"{" )
427 cNest.Inc(cNest.EK_Non);
434 if ( cNest.IsTopDepth() )
436 m_MessageLog(backGram,
ELL_DETAILS,
"深さ0で閉じ文字がありました。関数を終わります。");
439 else if ( cNest.GetNowKind() == cNest.EK_While )
441 m_MessageLog(backGram,
ELL_BRANCH,
"whileネストの'}'がありました。while文へ戻ります。");
442 _gram = cNest.GetWhileInfo();
458 EStatementResultType stateResType;
459 CTmlResult r = m_SearchAndExecCommand(_gram, cNest, _answer, stateResType);
464 if ( stateResType == ESRT_Return )
466 TTRACE0(_T(
"return文なので関数終了\n"));
469 else if ( stateResType == ESRT_Function )
471 if ( cNest.IsTopDepth() )
473 m_MessageLog(_gram,
ELL_DETAILS,
"深さ0で'func'がありました。関数を終わります。");
482 m_MessageBug(res,
"func文が発見されました。ここには func宣言は記述できません。");
515 m_MessageBug(r,
"謎の文 '%s...' があります。", str.
Left(32));
523 m_documents.
DecLevels(iStartContentsLevel);
547 CInterruptFunc(
void) : m_iLastAccessId(0)
554 m_astrFuncInfos.RemoveAll();
563 int Set(LPCSTR lpszFuncName, DWORD dwTick)
565 ASSERT( lpszFuncName != NULL && lpszFuncName[0]!=0 );
566 INT_PTR iFindingId = -1;
568 T.dwTick = ::GetTickCount() + dwTick;
569 T.strName = lpszFuncName;
570 size_t len = m_astrFuncInfos.GetSize();
571 for(
size_t i = m_iLastAccessId; i < len; i++ )
573 if ( m_astrFuncInfos[i].strName.IsEmpty() )
575 m_astrFuncInfos[i] = T;
580 if ( iFindingId < 0 )
582 for (
size_t i = 0; i < m_iLastAccessId && i < len; i++ )
584 if ( m_astrFuncInfos[i].strName.IsEmpty() )
586 m_astrFuncInfos[i] = T;
592 if ( iFindingId < 0 )
594 iFindingId = m_astrFuncInfos.Add(T);
596 TTRACE3(
"TML::CInterruptFunc::Set() %dms後に関数[%s]を実行予定 ID=%d\n", dwTick, lpszFuncName, iFindingId );
597 m_iLastAccessId = iFindingId + 1;
598 return ToInt(iFindingId);
604 void Kill(
int iInterruptId)
606 if (
ToInt(m_astrFuncInfos.GetSize()) > iInterruptId )
608 if ( ! m_astrFuncInfos[iInterruptId].strName.IsEmpty() )
610 m_astrFuncInfos[iInterruptId].strName.Empty();
611 m_iLastAccessId = iInterruptId + 1;
612 TTRACE1(
"CInterruptFunc::Kill() ID=%dの割り込み停止\n", iInterruptId );
625 DWORD dwNow = ::GetTickCount();
626 loop ( i, m_astrFuncInfos.GetSize() )
628 if ( m_astrFuncInfos[i].strName.IsEmpty() )
632 int r =
static_cast<int>(dwNow - m_astrFuncInfos[i].dwTick);
635 TTRACE2(
"TML::CInterruptFunc::Check() ID=%dの割込実行 Func=[%s]\n", i,
636 m_astrFuncInfos[i].strName
638 vs.
Add(m_astrFuncInfos[i].strName);
639 m_astrFuncInfos[i].strName.Empty();
640 m_iLastAccessId = i + 1;
653 size_t m_iLastAccessId;
678 TTRACE1(
"ネストレベル=0 NowLvl=%d\n", m_iDepth);
683 return m_iDepth == 0;
686 EKind GetNowKind(
void)
688 if (
ToInt(m_aKind.GetSize()) <= m_iDepth )
692 return m_aKind.Ref(m_iDepth);
695 EKind GetLastKind(
void)
697 if (
ToInt(m_aKind.GetSize()) <= (m_iDepth + 1) )
701 return m_aKind.Ref(m_iDepth + 1);
704 void Inc(EKind eKind)
707 m_aKind.SetSize(m_iDepth);
709 TTRACE1(
"ネストレベル++ NowLvl=%d\n", m_iDepth);
715 TTRACE0(
" →whileネストです\n");
716 m_aWhileStartInfo.Insert(0, gram);
721 if ( GetNowKind() == EK_While )
723 return m_aWhileStartInfo[0];
732 if ( GetNowKind() == EK_While )
734 m_aWhileStartInfo.Remove(0);
738 TTRACE1(
"ネストレベル-- NowLvl=%d\n", m_iDepth);
750 CInterruptFunc m_cInterruptInfo;
751 IListener* m_piListener;
755 INT_PTR m_iLogLastLine;
764 if ( m_piListener != NULL )
766 if ( ! m_piListener->IsExecutionContinued() )
768 m_MessageBug(
"中断します。");
781 TTRACE1(
"時間が来たので [%s]を実行\n", astrFuncs[i] );
799 void m_MessageBug(LPCSTR lpszMessage, ...)
803 va_start(args, lpszMessage);
804 str.
FormatV(lpszMessage, args);
806 m_MessageBug(m_strLogLastName, m_iLogLastLine, str);
817 void m_MessageBug(
const CTmlResult& res, LPCSTR lpszMessage, ...)
825 va_start(args, lpszMessage);
826 str.
FormatV(lpszMessage, args);
840 void m_MessageBug(LPCSTR lpszName, INT_PTR iLine, LPCSTR lpszMessage)
845 str.
Format(
"%s(%d): Error:%s", lpszName, iLine, lpszMessage);
849 str.
Format(
"%s", lpszMessage);
851 m_strLogLastName = lpszName;
852 m_iLogLastLine = iLine;
854 ::OutputDebugStringA(str +
"\n");
856 if ( m_piListener != NULL )
858 m_piListener->OutputLog(
CStr(str),
true);
870 void m_MessageLog(
ELogLevel elLevel, LPCSTR lpszMessage, ...)
874 va_start(args, lpszMessage);
875 str.
FormatV(lpszMessage, args);
877 m_MessageLog(
"", 0, elLevel, str);
893 va_start(args, lpszMessage);
894 str.
FormatV(lpszMessage, args);
909 void m_MessageLog(LPCSTR lpszName, INT_PTR iLine,
ELogLevel elLevel, LPCSTR lpszMessage)
912 if ( m_eLogLevel<elLevel )
937 str.
Format(
"%s(%d): %s:%s", lpszName, iLine, strLevel, lpszMessage);
941 str.
Format(
" %s:%s", strLevel, lpszMessage);
944 ::OutputDebugStringA(str +
"\n");
945 if ( m_eLogLevel < elLevel )
950 if ( m_piListener != NULL )
952 m_piListener->OutputLog(
CStr(str),
false);
960 void m_DumpVarDim(
void)
965 INT_PTR iDim1 = aaVava.
GetSize();
966 for( INT_PTR i = iDim1 - 1; i >= 0; i-- )
971 for( INT_PTR j = 0; j < iDim2; j++ )
991 for( INT_PTR j = 0; j < iDim2; j++ )
995 for( INT_PTR k = 0; k < iDim3; k++ )
997 if ( T.
values[k].HasData() )
1029 if ( lpszToken == NULL )
1032 ASSERT( boIsTestMode );
1033 m_MessageBug(_answer().GetString());
1047 _answer.
Set(lpszToken);
1061 else if ( aValues.
GetSize() == 1 )
1063 int i = aValues[0].GetInteger();
1071 s.
Format(
"%s(%d)", lpszToken, i);
1079 if ( m_piExpander != NULL )
1103 TTRACE1(
"found System Func [%s]\n", lpszToken );
1108 int i = aValues[0].GetInteger();
1115 dwStart = ::GetTickCount();
1118 dwNow = ::GetTickCount();
1120 if ( (dwNow - dwStart) >= dw ) {
break; }
1121 r = m_CheckInterrupt();
1127 dwStart = ::GetTickCount();
1130 dwNow = ::GetTickCount();
1132 if ( (dwNow - dwStart) >= dw ) {
break; }
1133 r = m_CheckInterrupt();
1145 TTRACE1(
"found System Func [%s]\n", lpszToken );
1150 CAscii strFuncName = aValues[0].GetString();
1153 tFunc = m_documents.
FindFunc(strFuncName);
1158 _answer = m_cInterruptInfo.Set(strFuncName, aValues[1].GetInteger());
1167 TTRACE1(
"found System Func [%s]\n", lpszToken );
1171 m_cInterruptInfo.Empty();
1174 else if ( aValues.
GetSize() == 1 )
1177 m_cInterruptInfo.Kill(aValues[0].GetInteger());
1186 TTRACE1(
"found System Func [%s]\n", lpszToken );
1189 if ( boIsTestMode ) {
return ETR_Success; }
1190 CCurrentDirMan cDirMan;
1191 cDirMan.SetDirOfFile( m_cText.GetFileName() );
1193 CString strWaveName = aValues[0].GetString();
1194 DWORD dwSound = SND_FILENAME | SND_NODEFAULT | SND_ASYNC;
1195 if ( lpszToken[0]==
'l' )
1197 dwSound |= SND_LOOP;
1199 ::PlaySound(strWaveName, NULL, dwSound);
1205 else if ( _tcscmp( lpszToken,
"stopsound" )==0 )
1208 TTRACE1(
"found System Func [%s]\n", lpszToken);
1211 if ( boIsTestMode ){
return ETR_Success;}
1213 ::PlaySound(NULL, NULL, 0);
1234 if ( m_piExpander != NULL )
1242 enum EStatementResultType
1266 _stateResType = ESRT_Normal;
1280 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1281 _stateResType = ESRT_Function;
1285 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1287 if ( strchr(
";{}/", parts.
GetString()[0]) != NULL )
1298 m_MessageBug(res,
"%s 文の引数式でエラーが発生しました。", token);
1304 if ( ! boIsTestMode )
1307 if ( token[0] ==
'r' )
1310 _stateResType = ESRT_Return;
1324 else if ( token.
IsEqual(
"val") )
1326 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1332 m_MessageBug(res,
"valの後に、変数名指定がありません。");
1346 m_MessageBug(res,
"valの変数初期化の式でエラーが発生しました。");
1371 if ( ! m_variable.
AddValue(valName, firstValue) )
1374 m_MessageBug(res,
"valの変数登録でなぞのエラーが発生しました。");
1380 else if ( token.
IsEqual(
"array") )
1382 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1388 m_MessageBug(res,
"arrayの後に、変数名指定がありません。");
1396 m_MessageBug(res,
"arrayの配列名の後に括弧がありません。");
1407 m_MessageBug(res,
"arrayの配列サイズの式でエラーが発生しました。");
1433 m_MessageBug(res,
"arrayの配列サイズが異常値です。");
1440 else if ( token.
IsEqual(
"if") )
1442 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1450 m_MessageBug(res,
"if文の条件式でエラーが発生しました。");
1457 m_MessageBug(res,
"if文に`{'がありません。");
1461 if ( ! boIsTestMode )
1466 m_MessageLog(
ELL_BRANCH,
"└条件に合いましたので以下を実行します");
1467 _nest.Inc(CNestInfo::EK_IfEqu);
1474 _nest.Inc( CNestInfo::EK_IfNeq );
1482 m_MessageLog(
ELL_BRANCH,
"└テストモードなので以下を実行します");
1483 _nest.Inc(CNestInfo::EK_IfNeq);
1488 else if ( token.
IsEqual(
"else") )
1490 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1496 switch( _nest.GetLastKind() )
1498 case CNestInfo::EK_IfEqu:
1499 m_MessageLog(
ELL_BRANCH,
"└条件に合いましたのでelse文を実行しません");
1507 m_MessageBug(res,
"if文の条件式でエラーが発生しました。");
1514 m_MessageBug(res,
"if文に`{'がありません。");
1520 case CNestInfo::EK_IfNeq:
1521 m_MessageLog(
ELL_BRANCH,
"└条件に合わないのでelse の後の if文を実行します");
1525 m_MessageBug(res,
"if文がないのにelse文があります。");
1532 m_MessageBug(res,
"else文に`{'がありません。");
1537 switch( _nest.GetLastKind() )
1539 case CNestInfo::EK_IfEqu:
1540 m_MessageLog(
ELL_BRANCH,
"└条件に合いましたのでelse文を実行しません");
1543 case CNestInfo::EK_IfNeq:
1544 m_MessageLog(
ELL_BRANCH,
"└条件に合わないのでelse文を実行します");
1545 _nest.Inc(CNestInfo::EK_Non);
1551 m_MessageBug(res,
"if文がないのにelse文があります。");
1556 else if ( token.
IsEqual(
"case") )
1558 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1565 m_MessageBug(res,
"case文の式でエラーが発生しました。");
1572 m_MessageBug(res,
"case文に`:'がありません。");
1576 else if ( token.
IsEqual(
"default") )
1578 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1584 m_MessageBug(res,
"default文に`:'がありません。");
1588 else if ( token.
IsEqual(
"switch") )
1590 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1597 m_MessageBug(res,
"switch文の条件式でエラーが発生しました。");
1606 m_MessageBug(res,
"switch文に`{'がありません。");
1614 bool boMatchCase =
false;
1625 else if ( token.
IsEqual(
"}") )
1636 m_MessageBug(res,
"`{'が綴じてません。");
1639 if ( token.
IsEqual(
"default") )
1641 m_MessageLog(_gram,
ELL_DETAILS,
"`default文'を確認");
1646 m_MessageBug(res,
"switch文に`:'がありません。");
1649 defaultGram = _gram;
1652 else if ( token.
IsEqual(
"case") )
1661 m_MessageBug(res,
"case文の式でエラーが発生しました。");
1668 m_MessageBug(res,
"case文に`:'がありません。");
1681 if ( ! boIsTestMode )
1684 if ( ! boMatchCase )
1689 m_MessageLog(
ELL_BRANCH,
"一致するcase文がないのでdefault文以下を実行します");
1690 _gram = defaultGram;
1695 m_MessageLog(
ELL_BRANCH,
"switch構文内に一致する`case'`default'文がありませんでした");
1701 _nest.Inc(CNestInfo::EK_Switch);
1710 _nest.Inc( CNestInfo::EK_Switch );
1715 else if ( token.
IsEqual(
"while") )
1717 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1724 m_MessageBug(res,
"while文の条件式でエラーが発生しました。");
1732 m_MessageBug(res,
"while文に`{'がありません。");
1735 if ( ! boIsTestMode )
1740 m_MessageLog(
ELL_BRANCH,
"└条件に合いましたので以下を実行します");
1741 _nest.IncWhile(_gram);
1754 _nest.Inc(CNestInfo::EK_Switch);
1759 else if ( token.
IsEqual(
"break") )
1761 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1763 if ( _nest.IsTopDepth() )
1766 m_MessageBug(res,
"`switch'か`while'文がないのに`break'文があります。");
1770 CNestInfo cNestTmp = _nest;
1775 if ( cNestTmp.GetNowKind() == CNestInfo::EK_Switch || cNestTmp.GetNowKind() == CNestInfo::EK_While )
1781 m_MessageBug(res,
"'{'が閉じていません。");
1785 if ( ! boIsTestMode )
1805 m_MessageBug(res,
"'{'が閉じていません。");
1809 if ( ! boIsTestMode )
1815 if ( cNestTmp.IsTopDepth() )
1819 m_MessageBug(res,
"`switch'か`while'文がないのに`break'文があります。");
1825 else if ( token.
IsEqual(
"include") )
1827 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1834 m_MessageBug(res,
"include文の条件式でエラーが発生しました。");
1843 m_MessageBug(res,
"include文の条件式でエラーが発生しました。");
1848 else if ( token.
IsEqual(
"vardump") )
1850 m_MessageLog(backGram,
ELL_FUNC,
"`%s'文を確認", token);
1852 if ( ! boIsTestMode )
1869 friend class CTmlMacroTest;
#define loop(VAR, CNT)
loop構文.
TinyMacroLang ドキュメント管理関係のヘッダ
static CStr GetPathName(LPCTSTR lpszFullPath)
[取得] フォルダ名抽出.
CFileReader Open(LPCTSTR lpszFile, LPCTSTR lpszPath=NULL) const
[操作] ファイルオープン.
virtual bool CanRead(void) const
[確認] 読み込み可能か
virtual LPCTSTR GetOpenName(void) const
[取得] オープン名取得
virtual void Close(void)
[操作] クローズ
bool IsEqualString(LPCSTR lpsz) const
[比較] 内容比較
EPartsKind GetKind(void) const
[取得] 種類
const TYP * GetString(void) const
[取得] 内容
UINT_PTR GetLine(void) const
[取得] 行番号取得
ITE GetPointer(void)
[取得] 現在のイテレータ
CParts GetNextParts(bool boIsToken=true)
[取得] 次のパーツ取得
bool SkipoutBlock(void)
[処理] ブロックからステップアウト.
CStr GetName(void) const
[取得] 名前取得
void SetName(LPCTSTR name)
[設定] 名前設定
CParts PeekNextParts(bool boIsToken=true)
[確認] 次のパーツ確認
void FormatV(const TYP *lpszFormat, va_list V)
[代入] 書式付き文字列代入.
bool IsEmpty(void) const
[確認] 空チェック
CStrT Left(size_t iSize) const
[作成] 範囲取得.
bool IsEqual(const TYP *lpszSubject) const
[確認] 文字列比較
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
CVectorT< CByteVector > & ReferElementWildResult(void)
[参照] ワイルドカードリザルト.
bool IsTestMode(void) const
[取得] テストモード状態取得
void SetExpander(ITmlExpander *piExpander=NULL)
[設定] 拡張処理指定
CTmlResult TextToValue(CTmlValue &_answer, LPCSTR lpsz)
[処理] 計算.
void SetTestMode(bool boIsTestMode)
[設定] テストモード設定.
CTmlResult Add(TFuncInfoRes &_tFuncInfo, LPCSTR lpszName, LPCSTR lpszData)
[追加] ファイル情報追加.
bool DecLevel(void)
[操作] レベル−1
void IncLevel(void)
[操作] レベル+1
INT_PTR GetLevel(void) const
[取得] 現在レベル取得
bool DecLevels(INT_PTR level)
[設定] レベル指定.
TFuncInfoRes FindFunc(LPCSTR lpszFunc) const
[検索] 関数検索.
CTmlResult ExecMacro(CTmlGrammar &_gram, CTmlValue &_answer)
[処理] マクロ実行.
void DecMacroLevel(void)
[設定] マクロレベル−1.
void IncMacroLevel(void)
[設定] マクロレベル+1.
bool IsTestMode(void) const
[取得] テストモード状態取得
CTmlResult ExecFunction(CTmlValue &_answer, LPCSTR lpszFuncName, const CTmlValuesVector &aValues)
[処理] 指定関数の実行.
void SetExpander(ITmlExpander *piExpander=NULL)
[設定] 拡張関数のインターフェイス設定.
void SetListener(IListener *piListener=NULL)
[設定] リスナー用インターフェイス設定.
CTmlResult ExecFunction(CTmlValue &_answer, LPCSTR lpszFuncName)
[処理] 指定関数の実行.
CTmlResult AddMacroFile(LPCTSTR lpszName, LPCTSTR lpszPath=NULL)
[追加] マクロファイルの追加.
void Empty(void)
[設定] クリア.
void SetTestMode(bool boIsTestMode)
[設定] テストモード設定/解除.
bool ExistFunction(LPCSTR lpszFuncName) const
[確認] 指定関数の有無チェック.
void SetLogLevel(ELogLevel eLevel)
[設定] ログレベル、設定.
CTmlResult AddMacroContents(LPCTSTR lpszName, LPCSTR lpszData)
[追加] マクロコンテンツの追加.
bool IsNop(void) const
[確認] NOP 確認.
void SetErrorString(LPCSTR lpszString)
[設定] エラー内容設定
LPCSTR GetFuncName(void) const
[取得] エラー発生関数名取得
static CTmlResult CheckParamNum(INT_PTR iParamNum, INT_PTR iExpectNum)
[確認] パラメータの数と、期待の数のチェック.
LPCSTR GetFileName(void) const
[取得] エラーソースファイル名取得
void SetFuncName(LPCSTR lpszFunc)
[設定] エラー発生関数名設定
EResult GetResult(void) const
[取得] リザルトコード取得.
CAscii ToString(void)
[取得] 文字列取得.
void SetScene(EScene eScene)
[設定] シーンコード設定
bool IsError(void) const
[確認] ERROR 確認.
bool IsSuccess(void) const
[確認] SUCCESS 確認.
void SetOperation(EOperation eOperation)
[設定] オペレーションコード設定
INT_PTR GetFileLine(void) const
「取得」 エラーソース行番号取得
CTmlResult & SetLine(LPCSTR lpszFileName, INT_PTR iFileLine)
[設定] エラーソースファイル名、行数設定
void Set(LPCSTR lpsz)
[代入] 拡張ネーム指定.
void SetRef(CTmlValue &v)
[代入] Value参照指定.
INT_PTR Compare(ICollectionT< CByteVector > &_vvbWild, const CTmlValue &other) const
[比較] 比較.
int GetInteger(void) const
[取得] 数字取得.
CAscii GetString(void) const
[取得] 文字列取得.
bool HasData(void) const
[確認] データ型保持確認.
CTmlValue * FindValue(LPCSTR lpszName)
[検索] 変数名の検索 変数名に対になる値管理のポインタを返します。
bool DecLevel(void)
[設定] レベル−1.
bool AddArray(LPCSTR lpszName, size_t size)
[追加] 配列情報追加.
void IncLevel(void)
[設定] レベル+1.
CArVaVectors & ReferArrayArrays(void)
[取得] 配列情報参照.
void Empty(void)
[設定] Empty
bool HasNameInNowLevel(LPCSTR lpszName) const
[検索] 現レベルに指定名あるか.
CVaVaVectors & ReferVarArrays(void)
[取得] 変数情報参照.
INT_PTR GetLevel(void) const
[取得] 現在のレベル取得.
bool DecLevels(INT_PTR level)
[設定] レベル指定.
CTmlValuesVector * FindArray(LPCSTR lpszName)
[検索] 配列名の検索 配列名に対になる配列管理のポインタを返します。
bool AddValue(LPCSTR lpszName, const CTmlValue &v)
[追加] 変数情報追加.
@ Operation_FileAccess
Fileアクセス中
@ Operation_CheckFunc
関数チェック中
@ Operation_CheckStatement
ステートメントチェック中
@ Scene_Include
include文処理中
@ Scene_Default
default文処理中
@ Result_ReadFailure
Read失敗
@ Result_UnknownError
その他のエラー
@ Result_ManyParam
引数が多すぎます
@ Result_OpenFailure
Open失敗
@ Result_UnnecessaryParam
引数は不必要です
@ Result_UserInterruption
ユーザによる中断
@ Result_AlreadyExistName
既にある名前です
@ Result_InvalidWordPosition
単語位置が異常です(そこには存在しないはず)
@ Result_NotFoundParentheses
括弧が必要なところにない
@ Result_NotFoundFunction
必要な関数がありません
@ Result_ProgramableInterruption
プログラムによる中断
@ Result_NotCloseParentheses
括弧が閉じていない
@ Result_UnknownKeyword
知らないキーワード
virtual size_t GetSize(void) const
[取得] サイズ取得
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
virtual TYP & Ref(INDEX index)
[取得] 要素の参照取得.
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
int Compare(LPCSTR P1, LPCSTR P2, INT_PTR len=-1, DWORD dwCmpFlags=0)
[比較] 文字列比較(ASCII/SJIS用)
TNB::CStrT< char > CAscii
ASCII文字列クラス
TNB::CStrT< TCHAR > CStr
文字列クラス
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
CGrammarAnalyzerT< char > CTmlGrammar
TinyMacroLang 文章解析
void IgnoreUnusedValue(const T &value)
[宣言] 参照しない値宣言.
LPCSTR lpszFuncAdds
関数のあるアドレス(関数の頭の { の直後)
INT_PTR iFuncLine
関数のあるファイ行
const CAsciiVector * pastrParamNames
関数の引数名(Arrayの参照)
bool HasData(void) const
[確認] データを持っているか?
virtual bool IsExecutionContinued(void)=0
[通知] 継続確認通知.
virtual void OutputLog(LPCTSTR lpszLog, bool boHasErrMsg)=0
[通知] ログ出力通知.
virtual ~IListener(void)
デストラクタ
CTmlValuesVector values
内容
void ReadExactly(size_t size, LPVOID _P) const
[取得] 読み込み.
TinyMacroLang 関数拡張インターフェース
virtual CTmlResult OnChangeValue(LPCSTR lpszName, const CTmlValue &val)=0
[処理] 変更(代入)コールバック
virtual CTmlResult ExpandVariable(CTmlValueCarrier &_val, LPCSTR lpszToken, const CTmlValuesVector &aValues, bool boIsTestMode)=0
[処理] 拡張変数、関数の処理