From 12394965589545e0354658b59498cc9ff79bb3eb Mon Sep 17 00:00:00 2001 From: inovia Date: Sun, 24 Mar 2024 22:13:43 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=BBcnt\2=E3=82=84mes@hsp=E3=81=AA?= =?UTF-8?q?=E3=81=A9=E3=81=AE=E8=89=B2=E5=88=86=E3=81=91=E3=81=8C=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E4=BB=B6=E3=81=AE=E4=BF=AE=E6=AD=A3=20=E3=83=BB=E3=83=A9?= =?UTF-8?q?=E3=83=99=E3=83=AB=E3=83=BB=E9=96=A2=E6=95=B0=E4=B8=80=E8=A6=A7?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + sakura_core/parse/CWordParse.cpp | 16 +++++--- sakura_core/types/CType_Hsp3.cpp | 39 ++++++++++++++++--- sakura_core/view/CEditView_CmdHokan.cpp | 4 +- sakura_core/view/colors/CColor_KeywordSet.cpp | 4 +- 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 8c3646ac15..4d2b5f3f2c 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ UpgradeLog.htm /sakura_core/hsp/res/hsptmp /sakura/err1.hsp /sakura/test.js +/sakura/*.hsp diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 49571299bc..8000f11a62 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -326,6 +326,10 @@ ECharKind CWordParse::WhatKindOfCharForHSP( { return CK_CSYM; } + else if (c == L'\\' || c == L'@') // cnt\2 などの \ の識別用 + { + return CK_ETC; + } } return WhatKindOfChar(pData, pDataLen, nIdx); } @@ -398,14 +402,14 @@ bool CWordParse::SearchNextWordPosition( // 空白とタブは無視する // 現在位置の文字の種類を調べる - ECharKind nCharKind = WhatKindOfChar( pLine, nLineLen, nIdx ); + ECharKind nCharKind = WhatKindOfCharForHSP( pLine, nLineLen, nIdx ); CLogicInt nIdxNext = nIdx; // 2005-09-02 D.S.Koba GetSizeOfChar CLogicInt nCharChars = CNativeW::GetSizeOfChar( pLine, nLineLen, nIdxNext ); while( nCharChars > 0 ){ nIdxNext += nCharChars; - ECharKind nCharKindNext = WhatKindOfChar( pLine, nLineLen, nIdxNext ); + ECharKind nCharKindNext = WhatKindOfCharForHSP( pLine, nLineLen, nIdxNext ); // 空白とタブは無視する if( nCharKindNext == CK_TAB || nCharKindNext == CK_SPACE ){ if ( bStopsBothEnds && nCharKind != nCharKindNext ){ @@ -444,14 +448,14 @@ bool CWordParse::SearchNextWordPosition4KW( // 空白とタブは無視する // 現在位置の文字の種類を調べる - ECharKind nCharKind = WhatKindOfChar( pLine, nLineLen, nIdx ); + ECharKind nCharKind = WhatKindOfCharForHSP( pLine, nLineLen, nIdx ); CLogicInt nIdxNext = nIdx; // 2005-09-02 D.S.Koba GetSizeOfChar CLogicInt nCharChars = CNativeW::GetSizeOfChar( pLine, nLineLen, nIdxNext ); while( nCharChars > 0 ){ nIdxNext += nCharChars; - ECharKind nCharKindNext = WhatKindOfChar( pLine, nLineLen, nIdxNext ); + ECharKind nCharKindNext = WhatKindOfCharForHSP( pLine, nLineLen, nIdxNext ); // 空白とタブは無視する if( nCharKindNext == CK_TAB || nCharKindNext == CK_SPACE ){ if ( bStopsBothEnds && nCharKind != nCharKindNext ){ @@ -478,7 +482,7 @@ bool CWordParse::SearchPrevWordPosition(const wchar_t* pLine, CLogicInt nLineLen, CLogicInt nIdx, CLogicInt* pnColumnNew, BOOL bStopsBothEnds) { /* 現在位置の文字の種類を調べる */ - ECharKind nCharKind = CWordParse::WhatKindOfChar( pLine, nLineLen, nIdx ); + ECharKind nCharKind = CWordParse::WhatKindOfCharForHSP( pLine, nLineLen, nIdx ); if( nIdx == 0 ){ return false; } @@ -491,7 +495,7 @@ bool CWordParse::SearchPrevWordPosition(const wchar_t* pLine, while( nCharChars > 0 ){ CLogicInt nIdxNextPrev = nIdxNext; nIdxNext -= nCharChars; - ECharKind nCharKindNext = CWordParse::WhatKindOfChar( pLine, nLineLen, nIdxNext ); + ECharKind nCharKindNext = CWordParse::WhatKindOfCharForHSP( pLine, nLineLen, nIdxNext ); ECharKind nCharKindMerge = CWordParse::WhatKindOfTwoChars( nCharKindNext, nCharKind ); if( nCharKindMerge == CK_NULL ){ diff --git a/sakura_core/types/CType_Hsp3.cpp b/sakura_core/types/CType_Hsp3.cpp index 262997e462..6a40e7a476 100644 --- a/sakura_core/types/CType_Hsp3.cpp +++ b/sakura_core/types/CType_Hsp3.cpp @@ -256,7 +256,7 @@ void CType_Hsp3::InitTypeConfigImp(STypeConfig* pType) // pType->m_ColorInfoArr[COLORIDX_DIGIT].m_bDisp = true; //半角数値を色分け表示 //Mar. 10, 2001 JEPRO // pType->m_ColorInfoArr[COLORIDX_BRACKET_PAIR].m_bDisp = true; //対括弧の強調をデフォルトONに //Sep. 21, 2002 genta - pType->m_bStringLineOnly = false; // 文字列の改行を許す + pType->m_bStringLineOnly = false; // 文字列の改行を許さない pType->m_bUseHokanByKeyword = true; pType->m_bHokanLoHiCase = true; @@ -265,9 +265,6 @@ void CType_Hsp3::InitTypeConfigImp(STypeConfig* pType) /* HSP3スマートインデント処理 */ void CEditView::SmartIndent_HSP3(wchar_t wcChar) { - // TODO: HSPのラベル* 未対応 - - const wchar_t* pLine; CLogicInt nLineLen; int k; @@ -693,7 +690,23 @@ void CDocOutline::MakeFuncList_HSP3(CFuncInfoArr* pcFuncInfoArr) // シングルクォーテーション文字列を読み取り中 if ( FL_HSP3_MODE_SINGLE_QUOTE == nMode) { - if (L'\'' == pLine[i]) + if (i < nLineLen - 1 + && L'\\' == pLine[i] + && L'\\' == pLine[i + 1]) + { + // 継続判定:[\\] + ++i; + continue; + } + else if (i < nLineLen - 1 + && L'\\' == pLine[i] + && L'\'' == pLine[i + 1]) + { + // 継続判定:\' + ++i; + continue; + } + else if (L'\'' == pLine[i]) { nMode = FL_HSP3_MODE_NORMAL; continue; @@ -704,6 +717,14 @@ void CDocOutline::MakeFuncList_HSP3(CFuncInfoArr* pcFuncInfoArr) if (FL_HSP3_MODE_DOUBLE_QUOTE == nMode) { if (i < nLineLen - 1 + && L'\\' == pLine[i] + && L'\\' == pLine[i + 1]) + { + // 継続判定:[\\] + ++i; + continue; + } + else if (i < nLineLen - 1 && L'\\' == pLine[i] && L'"' == pLine[i+1]) { @@ -722,6 +743,14 @@ void CDocOutline::MakeFuncList_HSP3(CFuncInfoArr* pcFuncInfoArr) if (FL_HSP3_MODE_DOUBLE_QUOTE_MULTILINE == nMode) { if (i < nLineLen - 1 + && L'\\' == pLine[i] + && L'\\' == pLine[i + 1]) + { + // 継続判定:[\\] + ++i; + continue; + } + else if (i < nLineLen - 1 && L'\\' == pLine[i] && L'"' == pLine[i + 1]) { diff --git a/sakura_core/view/CEditView_CmdHokan.cpp b/sakura_core/view/CEditView_CmdHokan.cpp index 6f29a562cb..5e58aa1e6e 100644 --- a/sakura_core/view/CEditView_CmdHokan.cpp +++ b/sakura_core/view/CEditView_CmdHokan.cpp @@ -213,7 +213,7 @@ int CEditView::HokanSearchByFile( if( !bKeyStartWithMark && wcschr( L"$@#\\", pszLine[j] ) != NULL )continue; // 文字種類取得 - ECharKind kindPre = CWordParse::WhatKindOfChar( pszLine, nLineLen, j ); // 文字種類取得 + ECharKind kindPre = CWordParse::WhatKindOfCharForHSP( pszLine, nLineLen, j ); // 文字種類取得 // 全角記号は候補に含めない if ( kindPre == CK_ZEN_SPACE || kindPre == CK_ZEN_NOBASU || kindPre == CK_ZEN_DAKU || @@ -232,7 +232,7 @@ int CEditView::HokanSearchByFile( if ( pszLine[j] < 0x00C0 && !IS_KEYWORD_CHAR( pszLine[j] ) )break; // 文字種類取得 - ECharKind kindCur = CWordParse::WhatKindOfChar( pszLine, nLineLen, j ); + ECharKind kindCur = CWordParse::WhatKindOfCharForHSP( pszLine, nLineLen, j ); // 全角記号は候補に含めない if ( kindCur == CK_ZEN_SPACE || kindCur == CK_ZEN_KIGO || kindCur == CK_ZEN_SKIGO ){ break; diff --git a/sakura_core/view/colors/CColor_KeywordSet.cpp b/sakura_core/view/colors/CColor_KeywordSet.cpp index 8586fdb421..333400177f 100644 --- a/sakura_core/view/colors/CColor_KeywordSet.cpp +++ b/sakura_core/view/colors/CColor_KeywordSet.cpp @@ -56,12 +56,12 @@ bool CColor_KeywordSet::BeginColor(const CStringRef& cStr, int nPos) 現在位置からキーワードを抜き出し、そのキーワードが登録単語ならば、色を変える */ - const ECharKind charKind = CWordParse::WhatKindOfChar( cStr.GetPtr(), cStr.GetLength() , nPos ); + const ECharKind charKind = CWordParse::WhatKindOfCharForHSP( cStr.GetPtr(), cStr.GetLength() , nPos ); if( charKind <= CK_SPACE ){ return false; // この文字はキーワード対象文字ではない。 } if( 0 < nPos ){ - const ECharKind charKindPrev = CWordParse::WhatKindOfChar( cStr.GetPtr(), cStr.GetLength() , nPos-1 ); + const ECharKind charKindPrev = CWordParse::WhatKindOfCharForHSP( cStr.GetPtr(), cStr.GetLength() , nPos-1 ); const ECharKind charKindTwo = CWordParse::WhatKindOfTwoChars4KW( charKindPrev, charKind ); if( charKindTwo != CK_NULL ){ return false;